2016-05-12 16 views
0

コンテキスト:VS2015コミュニティ; C#; ClearScript.V8.5.4.5; Google.AdWords.18.25.0ClearScriptを使用してAdWordsをJavaScriptに公開するにはどうすればよいですか?

私は予算を行うためのスクリプト環境を作成しようとしています。 1つのC#側では、私は、JScriptの環境をセットアップし、私は数回、すでにこの種のものをやった

static JScriptEngine JSengine = null; 
    static Dictionary<string, object> Settings = new Dictionary<string, object>(); 

    static void Main(string[] args) 
    { 
     if (args.Length < 1) 
     { 
      Console.WriteLine("engine script.js"); 
      Environment.Exit(1); 
     } 
     string scriptSpec = args[0]; 

     try 
     { 
      JSengine = new JScriptEngine(WindowsScriptEngineFlags.EnableDebugging | WindowsScriptEngineFlags.EnableJITDebugging); 
     } 
     catch (Exception exc) 
     { 
      return; 
     } 

     // .. others as well e.g. File, Environment etc 

     JSengine.AddHostType("AdWordsUser", typeof(AdWordsUser)); 
     JSengine.AddHostType("AdWordsAppConfig", typeof(AdWordsAppConfig)); 
     JSengine.AddHostType("BudgetOrderService", typeof(BudgetOrderService)); 
     JSengine.AddHostType("Selector", typeof(Selector)); 
     JSengine.AddHostType("Predicate", typeof(Predicate)); 
     JSengine.AddHostType("BudgetOrderPage", typeof(BudgetOrderPage)); 
     JSengine.AddHostType("BudgetOrder", typeof(BudgetOrder)); 
     JSengine.AddHostType("PredicateOperator", typeof(PredicateOperator)); 
     JSengine.AddHostType("AdWordsService", typeof(AdWordsService)); 

     JSengine.AddHostObject("Settings", Settings); 

     object answer = null; 
     string script = File.ReadAllText(scriptSpec); 
     try 
     { 
      answer = JSengine.Evaluate(script); 
     } 
     catch (ScriptEngineException see) 
     { 
      Console.WriteLine(see.ErrorDetails); 
     } 
    } 

VIZ私はそれに必要なすべてのAdWords型とオブジェクトを、露光していますそこには驚きはありません。

私が今のところ持っている難しさは、JScript側のものです。この時点でのコードは次のようになります。この時点で

var user = new AdWordsUser(); 
user.OAuthProvider.ClientId = "anonymised.apps.googleusercontent.com"; 
user.OAuthProvider.ClientSecret = "anonymised"; 
user.OAuthProvider.AccessToken = ""; 
user.Config.OAuth2RefreshToken = "anonymised"; 
user.OAuthProvider.RefreshAccessToken(); 

var config = new AdWordsAppConfig(); 
config.ClientCustomerId = "anonymised"; 
config.DeveloperToken = "anonymised"; 
config.UserAgent = "anonymised"; 
config.OAuth2ClientId = user.OAuthProvider.ClientId; 
config.OAuth2ClientSecret = user.OAuthProvider.ClientSecret; 
config.OAuth2AccessToken = user.OAuthProvider.AccessToken; 
config.OAuth2RefreshToken = user.Config.OAuth2RefreshToken; 

var bos = user.GetService(AdWordsService.v201603.BudgetOrderService); 
var bas = bos.getBillingAccounts(); 

bosgetBillingAccountsについて何も知りません。それについて知っているbosのための唯一の方法は、しかし、その後、bosそれはuserに必要であり、getBillingAccountsを実行しようとすると、エラーが発生した値との間に何らの接続はありません

var bos = new BudgetOrderService(); 

を実行することです。

これが由来する元のC#コードは、BudgetOrderServiceGetServiceコール鋳造

BudgetOrderService bos = (BudgetOrderService)user.GetService(AdWordsService.v201603.BudgetOrderService); 
BillingAccount[] bas = bos.getBillingAccounts(); 

あるbosgetBillingAccountsを可視化するのに十分であると思われます。しかし、JScriptはそれを私に許しません。

ここからはどこですか?

答えて

1

あなたはスクリプトコードでキャストを行うことができるはず。あなたのスクリプトで、その後

// C# 
JSengine.Script.host = new HostFunctions(); 

:これを試してみてください

// JavaScript 
var bos = user.GetService(AdWordsService.v201603.BudgetOrderService); 
bos = host.cast(BudgetOrderService, bos); 

それとも、C#コードでキャストを行うデリゲートを公開することができます。

+0

ブリリアント!私はExtendedHostFunctionsを使用して終了しました。 – bugmagnet

関連する問題