Appel CoreService en utilisant Alchemy popup


4

Dans un plugin Alchemy, je voudrais afficher un popup avec un message simple comme, "Vous êtes sur le point de UnLocalize tous les composants enfants. Voulez-vous continuer" et puis lorsque le bouton "Continuer" est cliqué pour exécuter un code de service principal.

L'extension AddUser Alchemy a un bon exemple, mais je suis un peu perdu avec la complexité de la page JavaScript et ASPX. Est-il possible d'appeler le service Web du contrôleur directement à partir de la page aspx à l'aide d'un appel jQuery AJAX?

Ma compréhension est que le code CoreService devrait être situé dans un contrôleur implémentant le AlchemyApiController. L'interface graphique AddUser Extension a un bel exemple:

[AlchemyRoutePrefix("AddUserService")] 
public class AddUserController : AlchemyApiController 
{ 
    [HttpPost] 
    [Route(@"NewUser")] 
    public IHttpActionResult NewUser(UserInfoModel data) 
    { // .. magic happens here 
    } 
} 
3

Vous devez juste vous assurer que vous appelez AddWebApiProxy() dans le groupe de ressources pour votre boîte de dialogue et vous pouvez appeler vos méthodes de service comme ceci:

Alchemy.Plugins[" ${PluginName}"].Api.yourMethodHere(yourParameter) 

Vous devez ajouter un autre « .quelquechose » après api si vous avez ajouté un attribut AlchemyRoutePrefix à votre service:

Alchemy.Plugins["$ {PluginName}"].Api.yourRoutePrefix.yourMethodHere(yourParameter) 

Il existe différentes façons dont vous pouvez gérer le succès ou l'échec de cet appel. Personnellement, je préfère le modèle de promesse.

Tout ceci est expliqué dans la documentation du 'Plugin Anatomy -> Web Services' section.


4

Vous devriez être en mesure d'appeler le service de l'alchimie en utilisant le code comme le suivant:

// This is the Promise pattern that the webapi proxy js exposes. Look at another example to 
// see how the callback method can also be used. Your WebAPI controller's route and route prefix 
// attributes controls how the namespace is generated. 
Alchemy.Plugins["<YOUR_PLUGIN_NAME>"].Api.Service.newUser(userObject) 
   .success(function (data) { 
   // first arg in success is what's returned by your controller's action 
    $messages.registerGoal(data.message); 
   }) 
   .error(function (type, error){ 
   // first arg is string that shows the type of error ie (500 Internal), 2nd arg is object representing 
   // the error. For BadRequests and Exceptions, the error message will be in the error.message property.$ messages.registerError("There was an error", error.message); 
   }) 
   .complete(function() { 
   // this is called regardless of success or failure. 
   progress.finish(); 
   }); 

Vous pourriez avoir besoin d'ajouter une référence aux JS de votre plugin dans la page ASPX car elle est dans une fenêtre contextuelle.

Jetez un oeil à %TRIDION_HOME%\web\Alchemy\Plugins\<YOUR_PLUGIN_NAME>\assets\js pour voir les fichiers.