La implementación falla debido a un carácter "extraño"

Sep 18 2020

Nuestro administrador creó un nuevo campo de lista de selección (Client_Temperature_Status__c) en el objeto Cuenta y los valores agregados son en realidad emojis seleccionados usando el Selector de Emoji en Windows. Estos son los valores agregados a la lista de selección: 😡, 😐, 😁

Actualmente estamos usando Azure Pipelines para nuestras implementaciones y todo funcionaba bien hasta que se agregó este nuevo campo.

Comenzamos a recibir el siguiente error durante nuestras implementaciones:

Component Failures:
1.  objects/Account.object (Account.Business_Partner) -- Error: Picklist value: %3F%3F in picklist: Client_Temperature_Status__c not found (line 11490, column 18)

Tras una investigación rápida, notamos un comportamiento "extraño". Después de recuperar los metadatos de la organización mediante el comando "sfdx force: source: retrieve", a continuación se muestra el contenido del archivo xml del campo. El contenido es exactamente lo que esperamos.

<?xml version="1.0" encoding="UTF-8"?>
<CustomField xmlns="http://soap.sforce.com/2006/04/metadata">
    <fullName>Client_Temperature_Status__c</fullName>
    <externalId>false</externalId>
    <label>Client Temperature Status</label>
    <required>false</required>
    <trackFeedHistory>false</trackFeedHistory>
    <trackHistory>false</trackHistory>
    <type>Picklist</type>
    <valueSet>
        <valueSetDefinition>
            <sorted>false</sorted>
            <value>
                <fullName>😡</fullName>
                <default>false</default>
                <label>😡</label>
            </value>
            <value>
                <fullName>😐</fullName>
                <default>false</default>
                <label>😐</label>
            </value>
            <value>
                <fullName>😄</fullName>
                <default>false</default>
                <label>😄</label>
            </value>
        </valueSetDefinition>
    </valueSet>
</CustomField>

El problema comienza después de convertir el código fuente en formato api de metadatos antes de la implementación. Para nuestra sorpresa, en el archivo Account.object generado por el comando force: source: convert, esto es lo que encontramos para cada tipo de registro que tenemos en el objeto Account:

<picklistValues>
    <picklist>Client_Temperature_Status__c</picklist>
    <values>
        <fullName>%3F%3F</fullName>
        <default>false</default>
    </values>
</picklistValues>

Todos los tipos de registro tienen en realidad solo UN valor representado para el campo Client_Temperature_Status__c en el archivo Account.object, y no los tres valores de emoji como esperábamos, aunque se agregan al tipo de registro según la imagen a continuación:

Sabemos que podríamos usar alguna tarea Ant para solucionar esto en nuestro archivo Account.object antes de la implementación, pero nos preguntamos:

¿Alguien se ha enfrentado a esto antes? ¿Alguna idea?

Gracias.

Respuestas

2 xn. Sep 18 2020 at 18:14

Parece un error de API de metadatos de Salesforce en lugar de un sfdx force:source:converterror. Los picklistValuesde los metadatos recuperados solo contienen el %3F%3Fvalor único .

La construcción manual picklistValuesy la implementación funciona:

        <picklistValues>
            <picklist>Happiness__c</picklist>
            <values>
                <fullName>😡</fullName>
                <default>false</default>
            </values>
            <values>
                <fullName>😐</fullName>
                <default>false</default>
            </values>
            <values>
                <fullName>😄</fullName>
                <default>false</default>
            </values>
        </picklistValues>

No obstante, probablemente seguiría la sugerencia de Phil W de usar nombres de API en inglés para las opciones y emojis para las etiquetas.