12. Juli 2016 · von Andreas Klein

CRM Preislisten klonen

CRM bietet Anwendern die Möglichkeit, Preislisten zu erstellen und diese z.B. einem Kunden zuzuordnen. Wenn man beispielsweise mit einem Kunden einen entsprechenden Liefervertrag geschlossen hat, kann man, ausgehend von einer Standard-Preisliste, auch Rabattlisten erstellen, um so diesem Kunden andere Preise als die der Standard-Preisliste zu gewähren . Das ist grundsätzlich eine gute Sache.

Es kann jedoch auch vorkommen, dass man mit einem Kunden nur für bestimmte Produkte andere Preise aushandelt, andere Produkte aber beim Standardpreis belässt. Hierfür kann man nun eine kundenspezifische Preisliste anlegen und die betreffenden Produkte darin aufnehmen. Für alle nicht dort aufgeführten Produkte zieht nun wieder die Standardpreisliste.

Unangenehm wird es aber, wenn dies häufiger vorkommt, die spezifischen Preislisten umfangreich aber fast immer gleich sind. Hier wäre eine Möglichkeit sehr hilfreich, eine Preisliste kopieren zu können.

In dem Artikel Modale Dialoge für Dynamics CRM habe ich beschrieben wie man in CRM einen modalen Dialog einbauen kann. In dem Artikel CRM Plugins Triggern ist ein Mechanismus beschrieben, mit dem man aus Javascript heraus einen serverseitig ausgeführten Code triggern kann. Mit diesen beiden Techniken haben wir eine CRM Erweiterung zum Klonen von Preislisten erstellt.

Hierzu habe ich zunächst eine Webresource mit einem einfachen HTML Form erstellt. Mit diesem Form erfasst der Anwender später den Namen der neuen Preisliste.

Gate4 CRM Preisliste Klonen

 

<form id="formPopup">
 <div id="spinner"></div>
 <div class="dvrow">
 <div class="headerTitle">Neue Preisliste</div><hr/>
   <table style="border: none; table-layout: fixed;" cellspacing="0" cellpadding="0" name="pricelist information" valign="top">
     <colgroup>
       <col width="10">
       <col width="115">
       <col>
     </colgroup>
       <tr height="24"></tr>
       <tr height="24"><td></td>
       <td height="24" valign="middle"><div class="inlineEditLabelText">Name</div></td>
       <td height="24" valign="middle"><div><input class="inlineInputContainer" type="text" id="PricelistName" size="30" /></div></td>
     </tr>
     <tr height="36"></tr> 
   </table>
   <div class="row" style="text-align:right">
     <button title="Cancel" id="btnCancel" onclick="Gate4.ClonePricelistDialog.CancelButton();" type="button">Abbrechen</button>
     <button title="OK" id="btnOk" onclick="Gate4.ClonePricelistDialog.OkButton();" type="button">OK</button>
   </div>
 </div>
</form>

 

Aus dem dahinter liegenden JavaScript übergebe ich die GUID der aktuellen, zu klonenden, Preisliste und den neuen Namen als Parameter an das Command.

dialogWindow.setCallbackReference(function (result) {
  result.dialog.closeCurrentWindow();
  var pricelevelId = null;
  if (result.click === "OK") {
    var parameterJson = { "PricelistId": ItemId, "Name": result.name };
    pricelevelId = Gate4.Command.Execute("ClonePricelist", JSON.stringify(parameterJson));
...

 

Über das Command-Plugin wird nun der serverseitige Code angetriggert der die neue Preisliste erstellt und alle Preislisten-Elemente generiert.

Guid cloneId = Guid.NewGuid();
PriceLevel clone = new PriceLevel()
{
  Id = cloneId,
  Name = cloneName
};
ServiceContext.AddObject(clone);
List<ProductPriceLevel> products = (from u in ServiceContext.CreateQuery<ProductPriceLevel>() 
                                    where u.PriceLevelId.Id == pricelistId select u).ToList();
foreach (ProductPriceLevel product in products)
{
  ProductPriceLevel cloneProduct = new ProductPriceLevel()
  {
    PriceLevelId = clone.ToEntityReference(), 
    ProductId = product.ProductId,
    UoMId = product.UoMId,
    QuantitySellingCode = product.QuantitySellingCode,
    TransactionCurrencyId = product.TransactionCurrencyId,
    DiscountTypeId = product.DiscountTypeId,
    PricingMethodCode = product.PricingMethodCode,
    Amount = product.Amount
  };
  ServiceContext.AddObject(cloneProduct);
}
ServiceContext.SaveChanges();

 

Das Command gibt dann die GUID der neuen Preisliste an das aufrufende JavaScript zurück. Dort wird dann das entsprechende CRM Formular für die neue Preisliste geladen.

if (pricelevelId != null) {
  Xrm.Utility.openEntityForm("pricelevel", pricelevelId);
}

 

Zum Abschluss habe ich mittels der Ribbon Workbench von Develop 1 einen neuen Button in die Ribbon-Leiste der Preisliste eingefügt und diesen mit dem JavaScript zum Klonen der Preisliste verknüpft.

Gate4 CRM Pricelist Clone

 

Gate4 CRM Pricelist Clone

 

Damit kann man nun eine Preisliste auf Knopfdruck kopieren und muss dann lediglich die veränderten Produkte bearbeiten. Das ist einfach und spart Zeit im täglichen Geschäft.

 



Diesen Blogeintrag bewerten:


Haben Sie Fragen zu diesem Artikel oder brauchen Sie Unterstützung?

Nehmen Sie mit uns Kontakt auf!

Wir unterstützen Sie gerne bei Ihren CRM-Vorhaben!


Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Kontakt
Lassen Sie sich von uns beraten
Wir freuen uns über Ihr Interesse an unseren Leistungen. Hinterlassen Sie
uns Ihren Namen, Ihre Telefonnummer und E-Mail Adresse – wir melden
uns schnellstmöglich bei Ihnen.
Kontakt aufnehmen