Salesforce Metadata API: ao atualizar FieldPermissions em PermissionSet, outros FieldPermissions em outros objetos são redefinidos

Nov 26 2020

Na API de metadados versão 50.0, quando eu atualizo FieldPermissions em um PermissionSet, os outros FieldPermissions no mesmo PermissionSet são redefinidos.

A chamada updateMetatdata funcionou corretamente na versão 30.0. Não tenho certeza de qual versão o comportamento mudou.

<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns="http://soap.sforce.com/2006/04/metadata" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ins0="http://soap.sforce.com/2006/04/metadata">
  <env:Header>
    <ins0:SessionHeader>
      <ins0:sessionId>XXX</ins0:sessionId>
    </ins0:SessionHeader>
  </env:Header>
  <env:Body>
    <ins0:updateMetadata>
      <ins0:metadata xsi:type="ins0:PermissionSet">
        <tns:fieldPermissions>
          <tns:field>Receipt__c.Notes__c</tns:field>
          <tns:editable>true</tns:editable> 
          <tns:readable>true</tns:readable></tns:fieldPermissions> 
          <ins0:fullName>JasminePermissionSet</ins0:fullName> 
          <tns:label>JasminePermissionSet</tns:label>
      </ins0:metadata>
    </ins0:updateMetadata>
  </env:Body>
</env:Envelope>

Estou esquecendo de algo?

Respostas

1 sfdcfox Nov 25 2020 at 23:50

Isso mudou na versão 40.0 e aparentemente foi enviado aos desenvolvedores por e-mail. Eu já respondi isso em 2017, quando tínhamos uma pergunta sobre isso . Você deve recuperar o conteúdo de um Conjunto de permissões e definir quaisquer novas permissões. Essa alteração foi feita para facilitar o gerenciamento de conjuntos de permissões em relação a pacotes desbloqueados. Se você deseja o comportamento antigo, use a versão 39.0 da API ou inferior. Isso é uma solução temporária enquanto você atualiza seu código / lógica para antecipar o novo comportamento.