Kontext: VS2015 Gemeinschaft; C#; ClearScript.V8.5.4.5; Google.AdWords.18.25.0Wie kann AdWords über JavaScript mit JavaScript in Verbindung gebracht werden?
Ich versuche, eine Skriptumgebung zu erstellen, um meine Budgets zu tun. Einer der C# Seite, ich habe die Einrichtung eines JScript-Umgebung auf, und das Aussetzen der alle AdWords-Typen und Objekte, die ich es brauchen, nämlich
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);
}
}
Ich habe diese Art der Sache getan ein paar Mal schon, so keine Überraschungen dort.
Die Schwierigkeit, die ich im Moment habe, ist eine der JScript-Seite. Der Code an dieser Stelle sieht wie folgt aus:
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();
An diesem Punkt bos
weiß nichts über getBillingAccounts
. Der einzige Weg für bos
darüber wissen ist
var bos = new BudgetOrderService();
jedoch auszuführen, dann gibt es keine Verbindung dann zwischen bos
und die Werte, die sie in user
braucht, und versucht getBillingAccounts
löst einen Fehler auszuführen.
Die ursprüngliche C# -Code, aus dem das ist
BudgetOrderService bos = (BudgetOrderService)user.GetService(AdWordsService.v201603.BudgetOrderService);
BillingAccount[] bas = bos.getBillingAccounts();
Casting der GetService
Aufruf BudgetOrderService
zu machen getBillingAccounts
sichtbar in bos
scheint zu sein, ausreichend ableitet. JScript lässt mich das jedoch nicht tun.
Also wohin von hier?
Brilliant! Ich habe ExtendedHostFunctions verwendet. – bugmagnet