Hey Jan,
ich bin mir nicht sicher ob dir das hilft aber hier ist, wie wir es in unseren Systemaktivitäten lösen:
Am Beispiel aus unserer SalesForce-Aktivität:
<outputParameters>
<list id='accountOutput' name='CONST_ACCOUNT_FIELD_LIST' desc='CONST_ACCOUNT_FIELD_LIST_DESC' fix_subtable='no' udl='accountFieldList' worktable='no' subtable='yes' fixed='no' datatype='varchar' required='yes' default='1' />
</outputParameters>
Man beachte den Parameter "udl='accountFieldList', dazu brauchen wir dann eine zusätzliche Funktion wie folgt:
public function getUDL($elementId, $udl) {
if ($elementId === 'accountFieldList') {
return [
['name' => CONST_ACCOUNT_LIST_ID, 'value' => 'Id'],
['name' => CONST_ACCOUNT_LIST_NAME, 'value' => 'Name'],
['name' => CONST_ACCOUNT_LIST_IS_DELETED, 'value' => 'isDeleted'],
['name' => CONST_ACCOUNT_LIST_TYPE, 'value' => 'Type'],
['name' => CONST_ACCOUNT_LIST_BILLING_STREET, 'value' => 'BillingStreet'],
['name' => CONST_ACCOUNT_LIST_BILLING_CITY, 'value' => 'BillingCity'],
['name' => CONST_ACCOUNT_LIST_BILLING_STATE, 'value' => 'BillingState'],
['name' => CONST_ACCOUNT_LIST_BILLING_POSTAL_CODE, 'value' => 'BillingPostalCode'],
['name' => CONST_ACCOUNT_LIST_BILLING_COUNTRY, 'value' => 'BillingCountry'],
['name' => CONST_ACCOUNT_LIST_SHIPPING_STREET, 'value' => 'ShippingStreet'],
['name' => CONST_ACCOUNT_LIST_SHIPPING_CITY, 'value' => 'ShippingCity'],
['name' => CONST_ACCOUNT_LIST_SHIPPING_STATE, 'value' => 'ShippingState'],
['name' => CONST_ACCOUNT_LIST_SHIPPING_POSTAL_CODE, 'value' => 'ShippingPostalCode'],
['name' => CONST_ACCOUNT_LIST_SHIPPING_COUNTRY, 'value' => 'ShippingCountry'],
['name' => CONST_ACCOUNT_LIST_PHONE, 'value' => 'Phone'],
['name' => CONST_ACCOUNT_LIST_FAX, 'value' => 'Fax'],
['name' => CONST_ACCOUNT_LIST_ACCOUNT_NUMBER, 'value' => 'AccountNumber'],
['name' => CONST_ACCOUNT_LIST_WEBSITE, 'value' => 'Website'],
['name' => CONST_ACCOUNT_LIST_ACCOUNT_SOURCE, 'value' => 'AccountSource'],
];
}
}
Das führt zu einem Ergebnis, bei dem man diese Felder als Auswahl bekommt in folgender Form:
Näher komme ich an deine Schilderung nicht heran. Hilft dir das?
Edit:
Achso, das ist jetzt ein OutputParameter, aber der InputParameter sieht ähnlich aus
<inputParameters>
<list id='accountInput' name='CONST_ACCOUNT_FIELD_LIST' desc='CONST_ACCOUNT_FIELD_LIST_DESC' fix_subtable='no' udl='accountInputFieldList' worktable='yes' subtable='yes' fixed='yes' datatype='varchar' required='yes' default='1' />
</inputParameters>
mit
public function getUDL($elementId, $udl) {
if ($elementId === 'accountInputFieldList') {
return [
['name' => CONST_ACCOUNT_LIST_NAME, 'value' => 'Name'],
['name' => CONST_ACCOUNT_LIST_TYPE, 'value' => 'Type'],
['name' => CONST_ACCOUNT_LIST_BILLING_STREET, 'value' => 'BillingStreet'],
['name' => CONST_ACCOUNT_LIST_BILLING_CITY, 'value' => 'BillingCity'],
['name' => CONST_ACCOUNT_LIST_BILLING_STATE, 'value' => 'BillingState'],
['name' => CONST_ACCOUNT_LIST_BILLING_POSTAL_CODE, 'value' => 'BillingPostalCode'],
['name' => CONST_ACCOUNT_LIST_BILLING_COUNTRY, 'value' => 'BillingCountry'],
['name' => CONST_ACCOUNT_LIST_SHIPPING_STREET, 'value' => 'ShippingStreet'],
['name' => CONST_ACCOUNT_LIST_SHIPPING_CITY, 'value' => 'ShippingCity'],
['name' => CONST_ACCOUNT_LIST_SHIPPING_STATE, 'value' => 'ShippingState'],
['name' => CONST_ACCOUNT_LIST_SHIPPING_POSTAL_CODE, 'value' => 'ShippingPostalCode'],
['name' => CONST_ACCOUNT_LIST_SHIPPING_COUNTRY, 'value' => 'ShippingCountry'],
['name' => CONST_ACCOUNT_LIST_PHONE, 'value' => 'Phone'],
['name' => CONST_ACCOUNT_LIST_FAX, 'value' => 'Fax'],
['name' => CONST_ACCOUNT_LIST_ACCOUNT_NUMBER, 'value' => 'AccountNumber'],
['name' => CONST_ACCOUNT_LIST_WEBSITE, 'value' => 'Website'],
['name' => CONST_ACCOUNT_LIST_ACCOUNT_SOURCE, 'value' => 'AccountSource'],
];
}
}
Grüße
Stefan
Hey Stefan,
danke erstmal für deine Hilfe. Das mit den Listen war soweit so klar, jedoch ist die Intention direkt die Listenelemente zu erzeugen, idealerweise schreibgeschützt. Einer meiner Studenten hat zumindest eine Möglichkeit gefunden, dass beim Aufruf die Einträge direkt erzeugt werden mit Hilfe folgender Logik in der getUDL Funktion
public function getUDL($udl, $elementID)
{
if($elementID == 'text')
{
$counter = $this->getSystemActivityVar('textCounter');
if($counter == null)
{
$counter = 0;
}
$this->error($counter);
$counter++;
$this->setSystemActivityVar('textCounter', $counter);
if(($counter % 3) == 1)
{
return [
['name' => 'TextArt', 'value' => 'textType']
];
}
elseif(($counter % 3) == 2)
{
return [
['name' => 'Sprache', 'value' => 'language']
];
}
elseif(($counter % 3) == 0)
{
return [
['name' => 'Text', 'value' => 'plainText']
];
}
}
}
In der Aktivität werden dann auch direkt 3 Einträge mit unterschiedlichen Werten erzeugt:
Aktuell sind die Einträge jedoch noch nicht in der Reihenfolge wie in der Funktion angegeben und beim Hinzufügen weiterer Einträge wird nur noch ein Wert in der Liste angezeigt.
Falls wir hierzu noch neue Erkenntnisse haben, melde ich mich nochmal gerne.