2012-05-29 3 views
5

Ich habe eine Tab-GUI-Erweiterung mit einem Formular und einem Textfeld. Ich möchte die Werte des Formularfelds in ApplicatioData speichern. Ich dachte an einen "Update" -Button, der eine Anguilla-Methode aufruft.Wie setze ich Tridion ApplicationData mit Anguilla JavaScript?

Gibt es eine Anguilla-Methode, um dies zu tun? Ich sehe in Anguilla dafür keine Methode. Starten des Codes:

var c = $display.getItem(); 
var uri = c.getId(); 

Antwort

6

Anguilla nicht aussetzen jedes (Webservice oder JavaScript) Methoden, um allgemein Anwendungsdaten zu ändern. Sie müssen Ihren eigenen serverseitigen Code angeben, um die Anwendungsdaten festzulegen.

Also in meiner letzten Notwendigkeit dafür habe ich einen einfach WCF-Webdienst, den die Anwendung Datensätze:

<?xml version="1.0" encoding="utf-8" ?> 
<Configuration> <!-- namespaces removed for readability --> 
    <resources cache="true"> 
    <cfg:filters/> 
    <cfg:groups> 
     <cfg:group name="Extensions.Models"> 
     <cfg:domainmodel name="Extensions.Models"> 
      <cfg:services> 
      <cfg:service type="wcf">Services/ExtensionsService.svc</cfg:service> 
      </cfg:services> 
     </cfg:domainmodel> 
     </cfg:group> 
    </cfg:groups> 
    ... 

Und:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)] 
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)] 
[ServiceContract(Namespace= "ExtensionsModel.Services")] 
public class ExtensionsService 
{ 
    [OperationContract] 
    [WebInvoke(Method = "POST", 
       RequestFormat = WebMessageFormat.Json, 
       ResponseFormat = WebMessageFormat.Json)] 
    public void SetEnabled(string[] itemIDs, bool enabled) 
    { 
     using (var client = TridionCoreService.GetSessionAwareClient()) 
     { 
      var appdata = new ApplicationData(); 
      appdata.ApplicationId = "ext:IsEnabled"; 
      appdata.Data = new ASCIIEncoding().GetBytes(enabled ? bool.TrueString : bool.FalseString); 
      foreach (var itemID in itemIDs) 
      { 
       client.SaveApplicationData(itemID, new[] {appdata}); 
      } 
     } 
    } 
} 

es in der Konfigurationsdatei von meinem Modell verdrahtet Rufen Sie dann diese Web-Methode von meinem command._execute

Extensions.Commands.DisableExtension.prototype._execute = function (selection) { 
    ExtensionsModel.Services.ExtensionsService.SetEnabled(selection.getItems(), false); 
}; 
+0

Ausgezeichnetes Beispiel! Ich mag den sauberen Ansatz, das Modell zu benutzen - das ist etwas, das mich verwirrt hat und jetzt klar ist. Vielen Dank! – robrtc

+0

Frage: Welche anderen Werte sind für das Attribut cfg: service type möglich? – robrtc

+0

Ich habe keine Ahnung und die Erforschung der XSD hilft mir nicht, ein Licht zu vergießen. Aber ich bin ehrlich: Ich bezweifle, dass es mit etwas anderem als den WCF-Diensten arbeiten soll. –

Verwandte Themen