1

I try to update the permissions on a field created from the API so that it is visible and usable.

so I do this via the salesforce metadata API.

responses = client.call(:update_metadata, message_tag: :updateMetadata, message: {metadata: { fullName: 'Admin', fieldPermissions: {field: "Contact.custom_attribute1_soap__c", editable: true, readable: true}}, :attributes! => {metadata: {"xsi:type" => "Profile"}}})


client is an instance of the gem Savon.

which gives me this, and seems correct to me !

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

however, salesforce sends me back a mistake. After hours of searching the documentation I don't understand.

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
   <soapenv:Body>
      <soapenv:Fault>
         <faultcode>soapenv:Client</faultcode>
         <faultstring>Unable to determine type mapping for type Profile.  Type is illegal here.</faultstring>
      </soapenv:Fault>
   </soapenv:Body>
</soapenv:Envelope>

One of you could explain my mistake to me, or give me a method to modify the permissions on a custom field created via the API, please?

  • What API call did you make when the "Unable to determine type mapping for type Profile" fault response came back? – Daniel Ballinger Feb 21 '19 at 20:11
  • It's a call to the API soap metadata the URL looks like this: https://um4.salesforce.com/services/Soap/m/39.0/<ID> – William Boulay Feb 25 '19 at 8:21
  • So you are trying to update the field permissions on the Admin profile via the metadata API, correct? – Daniel Ballinger Feb 25 '19 at 8:26
  • yes, I have created custom fields via the SOAP API and I need them to be visible and editable by the user and by the API. – William Boulay Feb 25 '19 at 8:54
  • Is there another way to achieve the same result, without using the SOAP API ? – William Boulay Feb 27 '19 at 9:12
0

One way to update the field permissions via the APIs is with the FieldPermissions that are exposed via the Partner API.

You can update the PermissionsEdit and PermissionsRead fields fairly easily. Use the ParentId to find the PermissionSet.

This is touched on in Metadata API Custom Field Permissions (how to automate this process)

0

You're missing the attribute "xmlns": "http://soap.sforce.com/2006/04/metadata"

Try:

responses = client.call(
    :update_metadata,
    message_tag: :updateMetadata,
    message: {
        metadata: {
            fullName: 'Admin',
            fieldPermissions: {
                field: "Contact.custom_attribute1_soap__c",
                editable: true,
                readable: true
            }
        },
        :attributes! => {
            metadata: {
                "xsi:type" => "Profile",
                "xmlns": "http://soap.sforce.com/2006/04/metadata"
            }
        }
    }
)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.