Calling a function that takes a struct as a parameter fails in JavaScript

Hello,

I have a C# RemObjects SDK service with a JSON message that is being called from a JavaScript client. All of the methods work except one. The JavaScript function “PrintTicket” below calls a PrintTemplate method on the server. The problem revolves around the PrinterSettings struck and the config variable.

var config = new PrinterSettings();

// calling alert here should show the object as a string but instead I get [object Object]
alert(config.toString());

If I remove the alert it will go all the way through to the call to PrintTemplate without any errors, including the part that assigns values to config’s members. The call to PrintTemplate fails with an “undefined” exception that is thrown at this line of the PrintTemplate function:

    msg.write("Settings", "PrinterSettings", Settings);

If I change the config definition to an empty object then the call gets all the way through to the C# service implementation but the Settings parameter is null.

What is odd to me is that the Parameter struct and param variable and parameters array pass through perfectly. It is just the PrinterSettings object / parameter that causes the issue and I can’t figure out what the difference is.

function PrintTicket(){
  try
  {
    var PrinterDriver = "Generic";
    var FileName = "\\NAND_Flash\\extern\\TicketFormats\\OutboundFromWeb.txt";
    var Copies = 1;
    var Values = new Array();
    var config = new PrinterSettings();
    
    config.PortMode = PortMode.COM;
    config.Parity = DataParity.None;
    config.DataBits = 8;
    config.BaudRate = 9600;
    config.Port = 2;

    //Add OutDate Param
      param = new Parameter();

      param.Name = "OutboundTimeDate";
      param.DataType = "System.DateTime";
      param.Value = $scope.Ticket.OutDate;

      Values.push(param);
    
    //Add Truck Param
      param = new Parameter();

      param.Name = "Truck";
      param.DataType = "System.String";
      param.Value = $scope.Ticket.Truck;

      Values.push(param);
    
    //Add Direction Param
      param = new Parameter();
        
      param.Name = "Direction";
      param.DataType = "System.String";
      param.Value = $scope.Ticket.Direction;

      Values.push(param);
    
    //Add Farm Param
      param = new Parameter();

      param.Name = "Farm";
      param.DataType = "System.String";
      param.Value = $scope.Ticket.Farm;
        
      Values.push(param);
    
    //Add Field Param    
      param = new Parameter();
        
      param.Name = "Field";
      param.DataType = "System.String";
      param.Value = $scope.Ticket.Field;

      Values.push(param);
    
    //Add Commodity Param
      param = new Parameter();

      param.Name = "Commodity";
      param.DataType = "System.String";
      param.Value = $scope.Ticket.Commodity;

      Values.push(param);
    
    //Add Splits Param
      param = new Parameter();
        
      param.Name = "Splits";
      param.DataType = "System.String";
      param.Value = $scope.Ticket.Splits;

      Values.push(param);
    
    //Add Gross Param
      param = new Parameter();
        
      param.Name = "Gross";
      param.DataType = "System.Double";
      param.Value = $scope.Ticket.Gross.toString();

      Values.push(param);
    
    //Add Tare Param
      param = new Parameter();
        
      param.Name = "Tare";
      param.DataType = "System.Double";
      param.Value = $scope.Ticket.Tare.toString();

      Values.push(param);
    
    //Add Net Param
      param = new Parameter();
        
      param.Name = "Net";
      param.DataType = "System.Double";
      param.Value = $scope.Ticket.Net.toString();

      Values.push(param);

    //Add Moisture Param
      param = new Parameter();

      param.Name = "Moisture";
      param.DataType = "System.Double";
      param.Value = $scope.Ticket.Moisture.toString();

      Values.push(param);
    
    //Add Test Weight Param
      param = new Parameter();

      param.Name = "TestWeight";
      param.DataType = "System.Double";
      param.Value = $scope.Ticket.TestWeight.toString();

      Values.push(param);
    
    //Get Ticket Number
      param = new Parameter();

      param.Name = "TicketNumber";
      param.DataType = "System.Int32";
      param.Value = $scope.Ticket.TicketNumber.toString();

      Values.push(param);
    
    //Call Print Method
    Printer.PrintTemplate(PrinterDriver,config,FileName,Copies,Values,
          function(result) 
          { 
              var response = result.toString();
              alert(response);
          }, 
          function(msg, e) { alert(e.Message); });
      }
      catch(err)
      {
        alert(err.Message);
      }
    }

Here is the JavaScript service…

//----------------------------------------------------------------------------//
// This unit was automatically generated by the RemObjects SDK after reading //
// the RODL file associated with this project . //
// //
// Do not modify this unit manually, or your changes will be lost when this //
// unit is regenerated the next time you compile the project. //
//----------------------------------------------------------------------------//

/* This codegen depends on RemObjects.js

  • Usage:
  • var Channel = new RemObjects.SDK.HTTPClientChannel(“http://localhost:8099/JSON”);
  • var Message = new RemObjects.SDK.JSONMessage();
  • var Service = new NewService(Channel, Message);
  • Service.Sum(1, 2,
  •         function(result) {
    
  •             alert(result);
    
  •         },
    
  •         function(msg) {alert(msg.getErrorMessage())}
    
  • );

*/

// Enum: DataParity
function DataParity() {
this.value = null;
};
DataParity.prototype = new RemObjects.SDK.ROEnumType();
DataParity.prototype.enumValues = [
“None”,
“Odd”,
“Even”
];
DataParity.prototype.constructor = DataParity;
RemObjects.SDK.RTTI[“DataParity”] = DataParity;

// Enum: PortMode
function PortMode() {
this.value = null;
};
PortMode.prototype = new RemObjects.SDK.ROEnumType();
PortMode.prototype.enumValues = [
“COM”,
“TCP”
];
PortMode.prototype.constructor = PortMode;
RemObjects.SDK.RTTI[“PortMode”] = PortMode;

// Struct: Parameter
function Parameter() {
this.DataType = {dataType : “AnsiString”, value : null};
this.Name = {dataType : “AnsiString”, value : null};
this.Value = {dataType : “AnsiString”, value : null};
};
Parameter.prototype = new RemObjects.SDK.ROStructType();
Parameter.prototype.constructor = Parameter;
RemObjects.SDK.RTTI[“Parameter”] = Parameter;

// Struct: ServerResponse
function ServerResponse() {
this.Data = {dataType : “Binary”, value : null};
this.Error = {dataType : “AnsiString”, value : null};
this.Result = {dataType : “Integer”, value : null};
};
ServerResponse.prototype = new RemObjects.SDK.ROStructType();
ServerResponse.prototype.constructor = ServerResponse;
RemObjects.SDK.RTTI[“ServerResponse”] = ServerResponse;

// Struct: TFileInfo
function TFileInfo() {
this.Filename = {dataType : “AnsiString”, value : null};
this.FileSize = {dataType : “Int64”, value : null};
this.FileTypeName = {dataType : “AnsiString”, value : null};
};
TFileInfo.prototype = new RemObjects.SDK.ROStructType();
TFileInfo.prototype.constructor = TFileInfo;
RemObjects.SDK.RTTI[“TFileInfo”] = TFileInfo;

// Struct: PrinterSettings
function PrinterSettings() {
this.BaudRate = {dataType : “Integer”, value : null};
this.DataBits = {dataType : “Integer”, value : null};
this.Host = {dataType : “AnsiString”, value : null};
this.Mode = {dataType : “PortMode”, value : null};
this.Parity = {dataType : “DataParity”, value : null};
this.Port = {dataType : “Integer”, value : null};
};
PrinterSettings.prototype = new RemObjects.SDK.ROStructType();
PrinterSettings.prototype.constructor = PrinterSettings;
RemObjects.SDK.RTTI[“PrinterSettings”] = PrinterSettings;

// Array: Parameters
function Parameters() {
RemObjects.SDK.ROArrayType.call(this);
this.elementType = “Parameter”;
};
Parameters.prototype = new RemObjects.SDK.ROArrayType();
Parameters.prototype.constructor = Parameters;
RemObjects.SDK.RTTI[“Parameters”] = Parameters;

// Array: StringArray
function StringArray() {
RemObjects.SDK.ROArrayType.call(this);
this.elementType = “AnsiString”;
};
StringArray.prototype = new RemObjects.SDK.ROArrayType();
StringArray.prototype.constructor = StringArray;
RemObjects.SDK.RTTI[“StringArray”] = StringArray;

// Array: TFileArray
function TFileArray() {
RemObjects.SDK.ROArrayType.call(this);
this.elementType = “TFileInfo”;
};
TFileArray.prototype = new RemObjects.SDK.ROArrayType();
TFileArray.prototype.constructor = TFileArray;
RemObjects.SDK.RTTI[“TFileArray”] = TFileArray;

// Service: DatabaseService
function DatabaseService(__channel, __message, __service_name) {
RemObjects.SDK.ROService.call(this, __channel, __message, __service_name);
this.fServiceName = this.fServiceName || __service_name || “DatabaseService”;
};

DatabaseService.prototype.AppendRecord = function(
Catalog,
TableName,
Values,
__success, __error) {
try {
var msg = this.fMessage.clone();
msg.initialize(this.fServiceName, “AppendRecord”);
msg.write(“Catalog”, “AnsiString”, Catalog);
msg.write(“TableName”, “AnsiString”, TableName);
msg.write(“Values”, “Parameters”, Values);
msg.finalize();
this.fChannel.dispatch(msg, function (__message) {
var __result = __message.read(“Result”, “ServerResponse”);
__success(
__result
);
}, __error);

} catch (e) {
    __error(msg, e);
};

};

DatabaseService.prototype.ApplyUpdates = function(
Catalog,
Table,
__success, __error) {
try {
var msg = this.fMessage.clone();
msg.initialize(this.fServiceName, “ApplyUpdates”);
msg.write(“Catalog”, “AnsiString”, Catalog);
msg.write(“Table”, “Binary”, Table);
msg.finalize();
this.fChannel.dispatch(msg, function (__message) {
var __result = __message.read(“Result”, “ServerResponse”);
__success(
__result
);
}, __error);

} catch (e) {
    __error(msg, e);
};

};

DatabaseService.prototype.DeleteRecords = function(
Catalog,
TableName,
Params,
__success, __error) {
try {
var msg = this.fMessage.clone();
msg.initialize(this.fServiceName, “DeleteRecords”);
msg.write(“Catalog”, “AnsiString”, Catalog);
msg.write(“TableName”, “AnsiString”, TableName);
msg.write(“Params”, “Parameters”, Params);
msg.finalize();
this.fChannel.dispatch(msg, function (__message) {
var __result = __message.read(“Result”, “ServerResponse”);
__success(
__result
);
}, __error);

} catch (e) {
    __error(msg, e);
};

};

DatabaseService.prototype.ExecQuery = function(
Catalog,
sql,
__success, __error) {
try {
var msg = this.fMessage.clone();
msg.initialize(this.fServiceName, “ExecQuery”);
msg.write(“Catalog”, “AnsiString”, Catalog);
msg.write(“sql”, “AnsiString”, sql);
msg.finalize();
this.fChannel.dispatch(msg, function (__message) {
var __result = __message.read(“Result”, “AnsiString”);
__success(
__result
);
}, __error);

} catch (e) {
    __error(msg, e);
};

};

DatabaseService.prototype.ExecSQL = function(
Catalog,
sql,
Params,
__success, __error) {
try {
var msg = this.fMessage.clone();
msg.initialize(this.fServiceName, “ExecSQL”);
msg.write(“Catalog”, “AnsiString”, Catalog);
msg.write(“sql”, “AnsiString”, sql);
msg.write(“Params”, “Parameters”, Params);
msg.finalize();
this.fChannel.dispatch(msg, function (__message) {
var __result = __message.read(“Result”, “ServerResponse”);
__success(
__result
);
}, __error);

} catch (e) {
    __error(msg, e);
};

};

DatabaseService.prototype.GetData = function(
Catalog,
sql,
__success, __error) {
try {
var msg = this.fMessage.clone();
msg.initialize(this.fServiceName, “GetData”);
msg.write(“Catalog”, “AnsiString”, Catalog);
msg.write(“sql”, “AnsiString”, sql);
msg.finalize();
this.fChannel.dispatch(msg, function (__message) {
var __result = __message.read(“Result”, “AnsiString”);
__success(
__result
);
}, __error);

} catch (e) {
    __error(msg, e);
};

};

DatabaseService.prototype.GetRecords = function(
Catalog,
sql,
Params,
__success, __error) {
try {
var msg = this.fMessage.clone();
msg.initialize(this.fServiceName, “GetRecords”);
msg.write(“Catalog”, “AnsiString”, Catalog);
msg.write(“sql”, “AnsiString”, sql);
msg.write(“Params”, “Parameters”, Params);
msg.finalize();
this.fChannel.dispatch(msg, function (__message) {
var __result = __message.read(“Result”, “ServerResponse”);
__success(
__result
);
}, __error);

} catch (e) {
    __error(msg, e);
};

};

DatabaseService.prototype.GetSchema = function(
Catalog,
__success, __error) {
try {
var msg = this.fMessage.clone();
msg.initialize(this.fServiceName, “GetSchema”);
msg.write(“Catalog”, “AnsiString”, Catalog);
msg.finalize();
this.fChannel.dispatch(msg, function (__message) {
var __result = __message.read(“Result”, “ServerResponse”);
__success(
__result
);
}, __error);

} catch (e) {
    __error(msg, e);
};

};

DatabaseService.prototype.GetTableNames = function(
Catalog,
__success, __error) {
try {
var msg = this.fMessage.clone();
msg.initialize(this.fServiceName, “GetTableNames”);
msg.write(“Catalog”, “AnsiString”, Catalog);
msg.finalize();
this.fChannel.dispatch(msg, function (__message) {
var __result = __message.read(“Result”, “AnsiString”);
__success(
__result
);
}, __error);

} catch (e) {
    __error(msg, e);
};

};

DatabaseService.prototype.GetTableSchema = function(
Catalog,
TableName,
__success, __error) {
try {
var msg = this.fMessage.clone();
msg.initialize(this.fServiceName, “GetTableSchema”);
msg.write(“Catalog”, “AnsiString”, Catalog);
msg.write(“TableName”, “AnsiString”, TableName);
msg.finalize();
this.fChannel.dispatch(msg, function (__message) {
var __result = __message.read(“Result”, “AnsiString”);
__success(
__result
);
}, __error);

} catch (e) {
    __error(msg, e);
};

};

DatabaseService.prototype.Ping = function(
__success, __error) {
try {
var msg = this.fMessage.clone();
msg.initialize(this.fServiceName, “Ping”);
msg.finalize();
this.fChannel.dispatch(msg, function (__message) {
var __result = __message.read(“Result”, “Boolean”);
__success(
__result
);
}, __error);

} catch (e) {
    __error(msg, e);
};

};

DatabaseService.prototype.UpdateRecords = function(
Catalog,
TableName,
Values,
Keys,
__success, __error) {
try {
var msg = this.fMessage.clone();
msg.initialize(this.fServiceName, “UpdateRecords”);
msg.write(“Catalog”, “AnsiString”, Catalog);
msg.write(“TableName”, “AnsiString”, TableName);
msg.write(“Values”, “Parameters”, Values);
msg.write(“Keys”, “Parameters”, Keys);
msg.finalize();
this.fChannel.dispatch(msg, function (__message) {
var __result = __message.read(“Result”, “ServerResponse”);
__success(
__result
);
}, __error);

} catch (e) {
    __error(msg, e);
};

};

// Service: FileService
function FileService(__channel, __message, __service_name) {
RemObjects.SDK.ROService.call(this, __channel, __message, __service_name);
this.fServiceName = this.fServiceName || __service_name || “FileService”;
};

FileService.prototype.GetDirectory = function(
SearchPath,
__success, __error) {
try {
var msg = this.fMessage.clone();
msg.initialize(this.fServiceName, “GetDirectory”);
msg.write(“SearchPath”, “AnsiString”, SearchPath);
msg.finalize();
this.fChannel.dispatch(msg, function (__message) {
var __result = __message.read(“Result”, “TFileArray”);
__success(
__result
);
}, __error);

} catch (e) {
    __error(msg, e);
};

};

FileService.prototype.GetFile = function(
Filename,
__success, __error) {
try {
var msg = this.fMessage.clone();
msg.initialize(this.fServiceName, “GetFile”);
msg.write(“Filename”, “AnsiString”, Filename);
msg.finalize();
this.fChannel.dispatch(msg, function (__message) {
var __result = __message.read(“Result”, “Binary”);
__success(
__result
);
}, __error);

} catch (e) {
    __error(msg, e);
};

};

FileService.prototype.PutFile = function(
Filename,
Data,
__success, __error) {
try {
var msg = this.fMessage.clone();
msg.initialize(this.fServiceName, “PutFile”);
msg.write(“Filename”, “AnsiString”, Filename);
msg.write(“Data”, “Binary”, Data);
msg.finalize();
this.fChannel.dispatch(msg, function (__message) {
__success(
);
}, __error);

} catch (e) {
    __error(msg, e);
};

};

FileService.prototype.DeleteFile = function(
Filename,
__success, __error) {
try {
var msg = this.fMessage.clone();
msg.initialize(this.fServiceName, “DeleteFile”);
msg.write(“Filename”, “AnsiString”, Filename);
msg.finalize();
this.fChannel.dispatch(msg, function (__message) {
__success(
);
}, __error);

} catch (e) {
    __error(msg, e);
};

};

FileService.prototype.RenameFile = function(
OriginalFilename,
NewFilename,
__success, __error) {
try {
var msg = this.fMessage.clone();
msg.initialize(this.fServiceName, “RenameFile”);
msg.write(“OriginalFilename”, “AnsiString”, OriginalFilename);
msg.write(“NewFilename”, “AnsiString”, NewFilename);
msg.finalize();
this.fChannel.dispatch(msg, function (__message) {
__success(
);
}, __error);

} catch (e) {
    __error(msg, e);
};

};

FileService.prototype.DirectoryExists = function(
Directory,
__success, __error) {
try {
var msg = this.fMessage.clone();
msg.initialize(this.fServiceName, “DirectoryExists”);
msg.write(“Directory”, “AnsiString”, Directory);
msg.finalize();
this.fChannel.dispatch(msg, function (__message) {
var __result = __message.read(“Result”, “Boolean”);
__success(
__result
);
}, __error);

} catch (e) {
    __error(msg, e);
};

};

FileService.prototype.CreateDirectory = function(
Directory,
__success, __error) {
try {
var msg = this.fMessage.clone();
msg.initialize(this.fServiceName, “CreateDirectory”);
msg.write(“Directory”, “AnsiString”, Directory);
msg.finalize();
this.fChannel.dispatch(msg, function (__message) {
__success(
);
}, __error);

} catch (e) {
    __error(msg, e);
};

};

FileService.prototype.DeleteDirectory = function(
Directory,
__success, __error) {
try {
var msg = this.fMessage.clone();
msg.initialize(this.fServiceName, “DeleteDirectory”);
msg.write(“Directory”, “AnsiString”, Directory);
msg.finalize();
this.fChannel.dispatch(msg, function (__message) {
__success(
);
}, __error);

} catch (e) {
    __error(msg, e);
};

};

FileService.prototype.FileExists = function(
Filename,
__success, __error) {
try {
var msg = this.fMessage.clone();
msg.initialize(this.fServiceName, “FileExists”);
msg.write(“Filename”, “AnsiString”, Filename);
msg.finalize();
this.fChannel.dispatch(msg, function (__message) {
var __result = __message.read(“Result”, “Boolean”);
__success(
__result
);
}, __error);

} catch (e) {
    __error(msg, e);
};

};

// Service: PrintService
function PrintService(__channel, __message, __service_name) {
RemObjects.SDK.ROService.call(this, __channel, __message, __service_name);
this.fServiceName = this.fServiceName || __service_name || “PrintService”;
};

PrintService.prototype.Print = function(
PrinterDriver,
Settings,
PrintFormat,
Copies,
Values,
__success, __error) {
try {
var msg = this.fMessage.clone();
msg.initialize(this.fServiceName, “Print”);
msg.write(“PrinterDriver”, “AnsiString”, PrinterDriver);
msg.write(“Settings”, “PrinterSettings”, Settings);
msg.write(“PrintFormat”, “AnsiString”, PrintFormat);
msg.write(“Copies”, “Integer”, Copies);
msg.write(“Values”, “Parameters”, Values);
msg.finalize();
this.fChannel.dispatch(msg, function (__message) {
var __result = __message.read(“Result”, “AnsiString”);
__success(
__result
);
}, __error);

} catch (e) {
    __error(msg, e);
};

};

PrintService.prototype.PrintTemplate = function(
PrinterDriver,
Settings,
FileName,
Copies,
Values,
__success, __error) {
try {
var msg = this.fMessage.clone();
msg.initialize(this.fServiceName, “PrintTemplate”);
msg.write(“PrinterDriver”, “AnsiString”, PrinterDriver);
msg.write(“Settings”, “PrinterSettings”, Settings);
msg.write(“FileName”, “AnsiString”, FileName);
msg.write(“Copies”, “Integer”, Copies);
msg.write(“Values”, “Parameters”, Values);
msg.finalize();
this.fChannel.dispatch(msg, function (__message) {
var __result = __message.read(“Result”, “AnsiString”);
__success(
__result
);
}, __error);

} catch (e) {
    __error(msg, e);
};

};

PrintService.prototype.GetDriverNames = function(
__success, __error) {
try {
var msg = this.fMessage.clone();
msg.initialize(this.fServiceName, “GetDriverNames”);
msg.finalize();
this.fChannel.dispatch(msg, function (__message) {
var __result = __message.read(“Result”, “StringArray”);
__success(
__result
);
}, __error);

} catch (e) {
    __error(msg, e);
};

};

// Service: SettingsService
function SettingsService(__channel, __message, __service_name) {
RemObjects.SDK.ROService.call(this, __channel, __message, __service_name);
this.fServiceName = this.fServiceName || __service_name || “SettingsService”;
};

SettingsService.prototype.ReadBool = function(
Node,
Key,
DefaultValue,
__success, __error) {
try {
var msg = this.fMessage.clone();
msg.initialize(this.fServiceName, “ReadBool”);
msg.write(“Node”, “AnsiString”, Node);
msg.write(“Key”, “AnsiString”, Key);
msg.write(“DefaultValue”, “Boolean”, DefaultValue);
msg.finalize();
this.fChannel.dispatch(msg, function (__message) {
var __result = __message.read(“Result”, “Boolean”);
__success(
__result
);
}, __error);

} catch (e) {
    __error(msg, e);
};

};

SettingsService.prototype.ReadDateTime = function(
Node,
Key,
DefaultValue,
__success, __error) {
try {
var msg = this.fMessage.clone();
msg.initialize(this.fServiceName, “ReadDateTime”);
msg.write(“Node”, “AnsiString”, Node);
msg.write(“Key”, “AnsiString”, Key);
msg.write(“DefaultValue”, “DateTime”, DefaultValue);
msg.finalize();
this.fChannel.dispatch(msg, function (__message) {
var __result = __message.read(“Result”, “DateTime”);
__success(
__result
);
}, __error);

} catch (e) {
    __error(msg, e);
};

};

SettingsService.prototype.ReadDouble = function(
Node,
Key,
DefaultValue,
__success, __error) {
try {
var msg = this.fMessage.clone();
msg.initialize(this.fServiceName, “ReadDouble”);
msg.write(“Node”, “AnsiString”, Node);
msg.write(“Key”, “AnsiString”, Key);
msg.write(“DefaultValue”, “Double”, DefaultValue);
msg.finalize();
this.fChannel.dispatch(msg, function (__message) {
var __result = __message.read(“Result”, “Double”);
__success(
__result
);
}, __error);

} catch (e) {
    __error(msg, e);
};

};

SettingsService.prototype.ReadInt = function(
Node,
Key,
DefaultValue,
__success, __error) {
try {
var msg = this.fMessage.clone();
msg.initialize(this.fServiceName, “ReadInt”);
msg.write(“Node”, “AnsiString”, Node);
msg.write(“Key”, “AnsiString”, Key);
msg.write(“DefaultValue”, “Integer”, DefaultValue);
msg.finalize();
this.fChannel.dispatch(msg, function (__message) {
var __result = __message.read(“Result”, “Integer”);
__success(
__result
);
}, __error);

} catch (e) {
    __error(msg, e);
};

};

SettingsService.prototype.ReadString = function(
Node,
Key,
DefaultValue,
__success, __error) {
try {
var msg = this.fMessage.clone();
msg.initialize(this.fServiceName, “ReadString”);
msg.write(“Node”, “AnsiString”, Node);
msg.write(“Key”, “AnsiString”, Key);
msg.write(“DefaultValue”, “AnsiString”, DefaultValue);
msg.finalize();
this.fChannel.dispatch(msg, function (__message) {
var __result = __message.read(“Result”, “AnsiString”);
__success(
__result
);
}, __error);

} catch (e) {
    __error(msg, e);
};

};

SettingsService.prototype.ReadStrings = function(
Node,
Key,
DefaultValues,
__success, __error) {
try {
var msg = this.fMessage.clone();
msg.initialize(this.fServiceName, “ReadStrings”);
msg.write(“Node”, “AnsiString”, Node);
msg.write(“Key”, “AnsiString”, Key);
msg.write(“DefaultValues”, “StringArray”, DefaultValues);
msg.finalize();
this.fChannel.dispatch(msg, function (__message) {
var __result = __message.read(“Result”, “StringArray”);
__success(
__result
);
}, __error);

} catch (e) {
    __error(msg, e);
};

};

SettingsService.prototype.WriteBool = function(
Node,
Key,
Value,
__success, __error) {
try {
var msg = this.fMessage.clone();
msg.initialize(this.fServiceName, “WriteBool”);
msg.write(“Node”, “AnsiString”, Node);
msg.write(“Key”, “AnsiString”, Key);
msg.write(“Value”, “Boolean”, Value);
msg.finalize();
this.fChannel.dispatch(msg, function (__message) {
__success(
);
}, __error);

} catch (e) {
    __error(msg, e);
};

};

SettingsService.prototype.WriteDateTime = function(
Node,
Key,
Value,
__success, __error) {
try {
var msg = this.fMessage.clone();
msg.initialize(this.fServiceName, “WriteDateTime”);
msg.write(“Node”, “AnsiString”, Node);
msg.write(“Key”, “AnsiString”, Key);
msg.write(“Value”, “DateTime”, Value);
msg.finalize();
this.fChannel.dispatch(msg, function (__message) {
__success(
);
}, __error);

} catch (e) {
    __error(msg, e);
};

};

SettingsService.prototype.WriteDouble = function(
Node,
Key,
Value,
__success, __error) {
try {
var msg = this.fMessage.clone();
msg.initialize(this.fServiceName, “WriteDouble”);
msg.write(“Node”, “AnsiString”, Node);
msg.write(“Key”, “AnsiString”, Key);
msg.write(“Value”, “Double”, Value);
msg.finalize();
this.fChannel.dispatch(msg, function (__message) {
__success(
);
}, __error);

} catch (e) {
    __error(msg, e);
};

};

SettingsService.prototype.WriteInt = function(
Node,
Key,
Value,
__success, __error) {
try {
var msg = this.fMessage.clone();
msg.initialize(this.fServiceName, “WriteInt”);
msg.write(“Node”, “AnsiString”, Node);
msg.write(“Key”, “AnsiString”, Key);
msg.write(“Value”, “Integer”, Value);
msg.finalize();
this.fChannel.dispatch(msg, function (__message) {
__success(
);
}, __error);

} catch (e) {
    __error(msg, e);
};

};

SettingsService.prototype.ReadSettings = function(
__success, __error) {
try {
var msg = this.fMessage.clone();
msg.initialize(this.fServiceName, “ReadSettings”);
msg.finalize();
this.fChannel.dispatch(msg, function (__message) {
var __result = __message.read(“Result”, “AnsiString”);
__success(
__result
);
}, __error);

} catch (e) {
    __error(msg, e);
};

};

SettingsService.prototype.WriteSettings = function(
Settings,
__success, __error) {
try {
var msg = this.fMessage.clone();
msg.initialize(this.fServiceName, “WriteSettings”);
msg.write(“Settings”, “AnsiString”, Settings);
msg.finalize();
this.fChannel.dispatch(msg, function (__message) {
__success(
);
}, __error);

} catch (e) {
    __error(msg, e);
};

};

SettingsService.prototype.WriteString = function(
Node,
Key,
Value,
__success, __error) {
try {
var msg = this.fMessage.clone();
msg.initialize(this.fServiceName, “WriteString”);
msg.write(“Node”, “AnsiString”, Node);
msg.write(“Key”, “AnsiString”, Key);
msg.write(“Value”, “AnsiString”, Value);
msg.finalize();
this.fChannel.dispatch(msg, function (__message) {
__success(
);
}, __error);

} catch (e) {
    __error(msg, e);
};

};

SettingsService.prototype.WriteStrings = function(
Node,
Key,
Values,
__success, __error) {
try {
var msg = this.fMessage.clone();
msg.initialize(this.fServiceName, “WriteStrings”);
msg.write(“Node”, “AnsiString”, Node);
msg.write(“Key”, “AnsiString”, Key);
msg.write(“Values”, “StringArray”, Values);
msg.finalize();
this.fChannel.dispatch(msg, function (__message) {
__success(
);
}, __error);

} catch (e) {
    __error(msg, e);
};

};

Hello

The PrinterSettings object should be initialized in a bit different way:

var config = new PrinterSettings();

config.PortMode = new PortMode();
config.Parity = new DataParity();

config.PortMode.value = "COM";
config.DataBits.value = 8;
config.BaudRate.value = 9600;
config.Port.value = 2;
config.Parity.value = "None";

This should resolve the issue.

Regards