Your achievements

Level 1

0% to

Level 2

Tip /
Sign in

Sign in to Community

to gain points, level up, and earn exciting badges like the new
BedrockMission!

Learn more

View all

Sign in to view all badges

SOLVED

AEM Forms drop-down list localization

idekaresearch
Level 2
Level 2

I am binding a drop-down list to an Entity in MS Dynamics. The data is just reference look-up data. I need to fetch either the English or French data from the Entity based on the language the user selects in the User Interface. e.g. list of countries in either English or French

In the Forms editor, when binding a drop-down list to REST endpoint, the Display Value must be selected from the list of available fields from the endpoint. This basically hard-codes the returned values to just a single language.

How can I set the Display Value based on the the language the user selects in the User Interface [not the browser language setting]?

1 Accepted Solution
idekaresearch
Correct answer by
Level 2
Level 2

Here is the final code hat works in the drop-down list initialization:

------------------------------------------------------------------------------------------

var operationInfo = {

    "formDataModelId": "/content/dam/formsanddocuments-fdm/ms-dynamics-fdm",

    "operationTitle": "GET salutation /salutations",

    "operationName": "GET salutation /salutations_15592508761020"

};

var inputs = {

};

var outputs;

var str = window.location.href.toLowerCase();

var matches = str.match(/afacceptlang=([^&]*)/); // extract query string parameter

if ( (matches !== null) && ( matches[1].toLowerCase() == 'fr'  ) ) {

  console.log('FRENCH');

  outputs={

      savedValue:'salutationid',

      displayedValue:'namefra',

      field:this

  }; 

}

else { // default language

console.log('ENGLISH');

  outputs={

      savedValue:'salutationid',

      displayedValue:'name',

      field:this

  }; 

}

guidelib.dataIntegrationUtils.setOptionsFromService(operationInfo, inputs, outputs);

------------------------------------------------------------------------------------------

View solution in original post

4 Replies
Mayank_Gandhi
Community Advisor
Community Advisor

Hi,

Do you need to make 2 different calls to get the different language list?

idekaresearch
Level 2
Level 2

I use the Visual Editor to bind the list once.

Seems like the below should work in the Code Editor data-binding

if(languageParameter='en') {

var operationInfo = {

    "formDataModelId": "/content/dam/formsanddocuments-fdm/ms-dynamics-fdm",

    "operationTitle": "GET salutation /salutations",

    "operationName": "GET salutation /salutations_15592508761020"

};

var inputs = {

};

var outputs={

    savedValue:'salutationid',

    displayedValue:'name_en',

    field:this

};

guidelib.dataIntegrationUtils.setOptionsFromService(operationInfo, inputs, outputs);

}

else {

var operationInfo = {

    "formDataModelId": "/content/dam/formsanddocuments-fdm/ms-dynamics-fdm",

    "operationTitle": "GET salutation /salutations",

    "operationName": "GET salutation /salutations_15592508761020"

};

var inputs = {

};

var outputs={

    savedValue:'salutationid',

    displayedValue:'name_fr',

    field:this

};

guidelib.dataIntegrationUtils.setOptionsFromService(operationInfo, inputs, outputs);

}

Mayank_Gandhi
Community Advisor
Community Advisor

Yes, the approach you are using is fine. Just place the script on the value-commit of the language field.

idekaresearch
Correct answer by
Level 2
Level 2

Here is the final code hat works in the drop-down list initialization:

------------------------------------------------------------------------------------------

var operationInfo = {

    "formDataModelId": "/content/dam/formsanddocuments-fdm/ms-dynamics-fdm",

    "operationTitle": "GET salutation /salutations",

    "operationName": "GET salutation /salutations_15592508761020"

};

var inputs = {

};

var outputs;

var str = window.location.href.toLowerCase();

var matches = str.match(/afacceptlang=([^&]*)/); // extract query string parameter

if ( (matches !== null) && ( matches[1].toLowerCase() == 'fr'  ) ) {

  console.log('FRENCH');

  outputs={

      savedValue:'salutationid',

      displayedValue:'namefra',

      field:this

  }; 

}

else { // default language

console.log('ENGLISH');

  outputs={

      savedValue:'salutationid',

      displayedValue:'name',

      field:this

  }; 

}

guidelib.dataIntegrationUtils.setOptionsFromService(operationInfo, inputs, outputs);

------------------------------------------------------------------------------------------

View solution in original post