使用炼金术呼叫CoreService弹出


4

在Alchemy插件中,我想显示一个弹出窗口,其中包含一个简单消息,如“您即将取消本地化所有子组件”。是否要继续“,然后当”继续“按钮是点击执行一些核心服务代码。

AddUser Alchemy扩展有个很好的例子,但是我对JavaScript和ASPX页面的复杂性有些遗憾。是否可以使用jQuery AJAX调用直接从aspx页面调用Controller Web服务?

我的理解是,CoreService代码应该位于实现AlchemyApiController的Controller中。该ADDUSER GUI扩展有一个很好的例子:

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

你只需要确保你打电话AddWebApiProxy()资源组为您的对话框,然后你可以打电话给你的服务方法,像这样:

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

您需要添加,如果阿比纷纷“.something”您添加了一个AlchemyRoutePrefix属性为您服务:

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

有些情况下,你可以处理该呼叫的成功或失败不同的方式。我个人更喜欢诺言模式。

所有这些都在'Plugin Anatomy -> Web Services' section的文档中进行了说明。


4

你应该能够使用类似的代码来调用炼丹服务如下:

// 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(); 
   }); 

您可能需要一个引用添加到您的插件的JS ASPX页面,因为它在一个弹出窗口中。

查看%TRIDION_HOME%\web\Alchemy\Plugins\<YOUR_PLUGIN_NAME>\assets\js来查看文件。