2012-05-29 8 views
5

Tengo una extensión de GUI de pestaña con un formulario y un campo de texto. Me gustaría guardar los valores del campo de formulario en ApplicatioData. Estaba pensando en un botón 'Actualizar' llamando a un método de Anguila.Cómo establecer Tridion ApplicationData usando Anguila JavaScript?

¿Hay un método de Anguila para hacer esto? No veo ningún método en Anguila para esto. Principio del código:

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

Respuesta

6

Anguilla no expone ningún método (JavaScript servicio web o) para modificar de forma genérica ApplicationData. Deberá proporcionar su propio código de servidor para configurar ApplicationData.

Así que en mi última necesidad de este Escribí un simple servicio web WCF que establece los datos de aplicación:

[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}); 
      } 
     } 
    } 
} 

Wired que en el archivo de configuración de mi modelo:

<?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> 
    ... 

Y luego llame a este método web desde mi command._execute

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

Excelente ejemplo! Realmente me gusta el enfoque limpio de usar el Modelo; esto es algo que me ha dejado perplejo y ahora está claro. ¡Gracias! – robrtc

+0

Pregunta: ¿Qué otros valores son posibles para el atributo cfg: tipo de servicio? – robrtc

+0

No tengo ni idea y explorar el XSD no me ayuda a arrojar una luz. Pero seré sincero: dudo que esté destinado a funcionar con cualquier cosa que no sean los servicios de WCF. –

Cuestiones relacionadas