Die Produkteigenschaft an der Angebotsposition
Allgemein
Die Verfügbarkeitsprüfung und Reservierung von Platzierungen im Angebotsprozess erfolgt über eine Produkteigenschaft ohne Berechnung vom Typ Tabelle. Obwohl die Produkteigenschaft ein Objekt aus appero quote ist, findet genau hier die Verbindung der beiden Produkte - appero quote und MediaVelox - statt. Daher ist der Aufbau der Produkteigenschaft auch so genau vorgegeben.
Auf der Angebotsposition selbst wird die Eigenschaft wie jede andere behandelt: Der Inhalt und Wert der Produkteigenschaft wird in Form eines JSON-Strings in das Feld “Spezifikation” sf42_quotefx__SF42_QuoLI_Specification__c
geschrieben.
Bei der Synchronisation des Angebots mit der Opportunity wird dieser String 1:1 in das Feld “Spezifikation JSON” sf42_quotefx__SF42_QuoLI_Specification_Export__c
auf dem OpportunityLineItem übertragen.
Damit OpportunityLineItem.trigger
und Opportunity.trigger
greifen können, und die zugehörigen Dispobücher erzeugt werden, ist der korrekte Aufbau des JSON-Strings wichtig.
Normalerweise wird der JSON-String natürlich automatisch durch appero quote geschrieben. Die folgende Darstellung dient zum einen dem besseren Verständnis und zum anderen als Anleitung, wenn die Opportunity-Produkte außerhalb von appero quote erzeugt werden und daraus Buchungen abgeleitet werden sollen.
Aufbau des JSON-Strings
Buchungen zu einem bestimmten Zeitpunkt
Bei zeitpunktbasierten Buchungen enthält der String neben den reinen Buchungsinformationen auch Angaben zur Darstellung der Tabelle im Angebotseditor. Hier ein Beispiel:
[
{
"type": "Table",
"propertyId": "a080E000006tLrXQAU",
"name": "Print AdSales Table Developer Magazine",
"value": "a0M0E000008imhsUAA",
"dispoValue": [
{
"adPosCatalogId": "a0M0E000008imhsUAA",
"reserved": "1",
"rotation": "1",
"blockValues": [
{
"adPosCatalogId": "a0M0E000008imhtUAA",
"blocked": "2"
},
]
}
],
"dataToDisplay": {
"columnLabels": [
"Ausgabe",
"Thema",
"Datum",
"Anzeigenschluss",
"Annahmeschluss",
"Platzierung"
],
"displayedRowList": [
{
"Ausgabe": {
"columnValue": "Developer Magazine.01.",
"columnType": "String",
"fieldName": "f42_dispo__IssueName__c"
},
"Thema": {
"columnValue": null,
"columnType": "String",
"fieldName": "f42_dispo__TeaserText__c"
},
"Datum": {
"columnValue": "2023-01-03",
"columnType": "Date",
"fieldName": "f42_dispo__PublicationDate__c"
},
"Anzeigenschluss": {
"columnValue": "2023-12-30",
"columnType": "Date",
"fieldName": "f42_dispo__ClosingDate__c"
},
"Annahmeschluss": {
"columnValue": "2023-12-28",
"columnType": "Date",
"fieldName": "f42_dispo__SubmissionDeadline__c"
},
"Platzierung": {
"columnValue": "1/1 page",
"columnType": "String",
"fieldName": "Name"
}
}
]
},
"fieldNames": [
"f42_dispo__Issue__r.f42_dispo__IssueName__c",
"f42_dispo__Issue__r.f42_dispo__TeaserText__c",
"f42_dispo__Issue__r.f42_dispo__PublicationDate__c",
"f42_dispo__Issue__r.f42_dispo__ClosingDate__c",
"f42_dispo__Issue__r.f42_dispo__SubmissionDeadline__c",
"f42_dispo__AdPosition__r.Name"
]
}
]
Abschnitt für Abschnitt setzt sich der String aus folgenden Informationen zusammen:
JSON | Bedeutung | Anmerkung |
---|---|---|
| jede Produkteigenschaft wird als Ganzes mit einer eckigen Klammer umschlossen |
|
| Eigenschaftstyp: Tabelle | Bezieht sich auf das Feld |
| ID der jeweiligen Produkteigenschaft |
|
| Name der Produkteigenschaft, wie er auch im Angebot angezeigt wird | Bezieht sich auf das Feld |
| Die ID der Verfügbarkeit, die in der Eigenschaft ausgewählt wurde und auf die die Reservierung angerechnet wird. | Bezieht sich auf das Objekt Werden mehrere Ausgaben reserviert, so werden die weiteren IDs Komma-getrennt aufgeführt. |
| Im folgenden Abschnitt sind die genauen Buchungsinformationen enthalten. |
|
| Die ID der Verfügbarkeit, die in der Eigenschaft ausgewählt wurde und auf die die Reservierung angerechnet wird. | Bezieht sich auf das Objekt Sofern in der Eigenschaft mehrere Ausgaben ausgewählt werden wird dieser folgende Abschnitt je Ausgabe/Verfügbarkeit wiederholt. |
| Mengenangabe, wie viel reserviert wurde - je Ausgabe | Zeitpunktbasierte Dispobücher haben nur die Menge 1, d.h. die Anzahl zu erstellender Dispobücher entspricht der unter “reserved” eingetragenen Menge. |
| standardmäßig ist hier “1” eingetragen; falls Rotation verwendet wird, wäre dieser Wert bereits am Produkt vorbelegt und hier übertragen | |
| Sofern mit der reservierten Platzierung Sperr-Regeln verknüpft sind, wird die zu sperrende Verfügbarkeit in diesem Abschnitt angezeigt | Bezieht sich auf das Objekt |
| Eine Reservierung kann mehr als einen Sperreintrag auslösen. Die Anzahl wird in diesem Abschnitt hinterlegt. | Eintrag richtet sich nach dem Feld |
| Mit diesen Informationen sind die relevanten Buchungsinformationen zum Erstellen der Dispobücher abgeschlossen |
|
| Der folgende Abschnitt behandelt die Darstellung der Tabelle im Produkt-Detail-Dialog |
|
| Darstellung der Spaltenüberschriften | Die Labels können Sie in der Produkteigenschaft selbst definieren |
| Darstellung der Ausgabe, auf die die Reservierung erfolgt, Spalte für Spalte, nach dem Schema: | Welche Spalten in der Tabelle angezeigt werden, legen Sie in der Produkteigenschaft fest. Werden mehr als eine Ausgabe reserviert, so ist der Eintrag an dieser Stelle natürlich länger. |
| Im letzten Abschnitt werden nochmal alle API-Namen der in der Object Query verwendeten Felder aufgelistet. |
|
| Die letzte eckige Klammer schließt das JSON |
|
Zeitraumbasierte Buchungen
Zeitraumbasierte Buchungen unterscheiden sich von zeitpunktbasierten insofern, als sie die weitere Dimension “Volumen” je Ausgabe enthalten. Außerdem deckt sich das Buchungsdatum nicht mit dem Erscheinungsdatum der Ausgabe, sondern es kann ein freier Zeitraum definiert werden.
Da die Darstellung der Eigenschaft - der Zeitstrahl - nicht vom User konfiguriert werden kann, sondern aus dem MediaVelox-Paket stammt, fällt das JSON dementsprechend kürzer aus:
[
{
"type": "Table",
"propertyId": "a080E000006tLrWQAU",
"name": "Digital AdSales Developer Community",
"value": "a0M0E000008imigUAA,100,2023-04-02,2023-04-12",
"dispoValue": [
{
"adPosCatalogId": "a0M0E000008imigUAA",
"startDate": "2023-04-02",
"endDate": "2023-04-12",
"volume": "100",
"reserved": "1",
"rotation": "0",
"VolumeType": "",
"blockValues": [
{
"adPosCatalogId": "a0M0E000008imieUAA",
"blocked": "100"
}
]
}
]
}
]
Abschnitt für Abschnitt setzt sich das Beispiel aus folgenden Informationen zusammen:
JSON | Bedeutung | Anmerkung |
---|---|---|
| jede Produkteigenschaft wird als Ganzes mit einer eckigen Klammer umschlossen |
|
| Eigenschaftstyp: Tabelle | Bezieht sich auf das Feld |
| ID der jeweiligen Produkteigenschaft |
|
| Name der Produkteigenschaft, wie er auch im Angebot angezeigt wird | Bezieht sich auf das Feld |
| Neben der ID der Verfügbarkeit, auf die sich die Reservierung bezieht, werden unter “Value” kommagetrennt auch das reservierte Volumen (100) sowie der im Angebot eingetragene Buchungszeitraum (02.04.23-12.04.23) angegeben. | Bezieht sich auf das Objekt Werden mehrere Ausgaben reserviert, so werden die einzelnen Abschnitte mit Pipe getrennt aufgeführt. |
| Im folgenden Abschnitt sind die genauen Buchungsinformationen einzeln enthalten. |
|
| Die ID der Verfügbarkeit, die in der Eigenschaft ausgewählt wurde und auf die die Reservierung angerechnet wird. | Bezieht sich auf das Objekt Wenn sich die Buchung über mehrere Ausgaben erstreckt, wird dieser folgende Teil des JSON je zugehörigem AdPosCatalog wiederholt. |
| Das Start- und Enddatum wie der User es in der Produkteigenschaft festlegt. | Wenn sich die Buchung über mehrere Ausgaben erstreckt, wird hier nur der zur jeweiligen Verfügbarkeit passende Zeitraum eingetragen. |
| Das im Angebot eingetragene Volumen | Wenn sich die Buchung über mehrere Ausgaben erstreckt, wird hier das anteilige Volumen je Verfügbarkeit eingetragen. |
| Der Eintrag unter “reserved” ist bei zeitraumbasierten Platzierungen immer 1. |
|
| Rotation spielt bei zeitraumbasierten Buchungen keine Rolle, daher ist der Eintrag immer 0 |
|
| aktuell nicht in Verwendung |
|
| Sofern mit der reservierten Platzierung Sperr-Regeln verknüpft sind, wird die zu sperrende Verfügbarkeit in diesem Abschnitt angezeigt |
|
| das zu sperrende Volumen | errechnet sich nach der prozentualen Angabe im Feld |
| abschließende Klammern |
|
.