1,虽然ms收购了ax,但是在ax低版本(ver<=4.0)中,还没有办法直接使用ms现在主推的.net技术。

通常的做法是现在AX中天津.net的引用,然后才能在代码中使用.net的一些对象以实现我们需要的功能。

2,添加引用

3. job中代码范本。

//test download image from web
//use this code can show web image on report print System.Net.HttpWebRequest httpRequest = null;
System.Net.HttpWebResponse httpResponse = null;
System.Net.CookieCollection cookies = null; CLRObject clro = null;
System.IO.Stream stream;
System.IO.StreamReader reader;
str msg;
BinData bidData=new BinData();
Image logoImage;
Bitmap Bitmap;
System.Drawing.Image webImage ;
System.BitConverter bit;
;
new InteropPermission(InteropKind::ClrInterop).assert();
clro = System.Net.WebRequest::Create("http://www5.sml.com/**Online/images/img1.JPG");
httpRequest = clro;
httpResponse = httpRequest.GetResponse();
stream = httpResponse.GetResponseStream();
reader = new System.IO.StreamReader(stream);
webImage = System.Drawing.Image::FromStream(stream);//webImage.FromStream( httpResponse.GetResponseStream();
webImage.Save("C:\\AXconfig\\001.jpg");
bidData.loadFile("C:\\AXconfig\\001.jpg");
Bitmap = bidData.getData();

4, 实现.NET的另外一种方法,示例代码,实现通过AX系统上载文件到非windows服务器。所有的C#对象都声明为ClrObject.

static boolean SML_UpLoadFileByStream(Str url,Str FullFileName,Container conHeader=connull(),Container conQueryString=connull())
{
ClrObject PostArray;
CLRObject BinaryReader;
CLRObject WCHeaders,WCQueryString;
ClrObject FileStream;
ClrObject FileMode;
ClrObject FileAccess;
ClrObject PostStream;
CLRObject WC;
System.Exception clrException;
boolean ret=false;
int i;
Container subcon;
System.Net.WebClient xx;
; if (winapi::fileExists(FullFileName))
{
try
{
FileStream = new CLRObject("System.IO.FileStream", FullFileName,
CLRInterop::parseClrEnum("System.IO.FileMode","Open"), CLRInterop::parseClrEnum("System.IO.FileAccess", "Read"));
BinaryReader = new CLRObject("System.IO.BinaryReader", FileStream);
PostArray= BinaryReader.ReadBytes(System.Convert::ToInt32(FileStream.get_Length()));
WC = new CLRObject("System.Net.WebClient");
if (conlen(conHeader))
{
WCHeaders=WC.get_Headers();
for(i=1;i<=conlen(conHeader);i++)
{
subcon=conpeek(conHeader,i);
WCHeaders.Add(conpeek(subcon,1),conpeek(subcon,2));
}
}
if (conlen(conQueryString))
{
WCQueryString=WC.get_QueryString();
for(i=1;i<=conlen(conQueryString);i++)
{
subcon=conpeek(conQueryString,i);
WCQueryString.Add(conpeek(subcon,1),conpeek(subcon,2));
}
}
PostStream=WC.OpenWrite(url, "POST");
PostStream.Write(PostArray, 0,PostArray.get_Length());
PostStream.close();
FileStream.close();
}
catch(Exception::CLRError)
{
if (CLRInterop::isNull(PostStream) == false)
{
PostStream.Close();
}
if (CLRInterop::isNull(FileStream) == false)
{
FileStream.Close();
}
}
ret=true;
}
return ret;
}

在AX4.0中使用C#脚本的实现的更多相关文章

  1. 浅析busybox-1.12.0中ash的脚本命令局限性

    浅析busybox-1.12.0中ash的脚本命令局限性 LUTHER= 表示将LUTHER清空,将其变为null echo ${LUTHER:-111}如果执行该句之前LUTHER变量不存在,那么显 ...

  2. 第四章 在MVC4.0中对脚本以及样式表的引用变化

    原文:http://www.cnblogs.com/xdotnet/archive/2012/07/21/aspnet40_webpage20.html 一.可以直接使用“~”,而无需使用Href对象 ...

  3. AppBox v6.0中实现子页面和父页面的复杂交互

    前言 1. AppBox是捐赠开源(获取源代码至少需要捐赠作者 1 元钱),基于的 FineUI(开源版)则是完整开源,网址:http://fineui.codeplex.com/ 2. 你可以通过捐 ...

  4. 在 Typescript 2.0 中使用 @types 类型定义

    在 Typescript 2.0 中使用 @type 类型定义 基于 Typescript 开发的时候,很麻烦的一个问题就是类型定义.导致在编译的时候,经常会看到一连串的找不到类型的提示.解决的方式经 ...

  5. redis中使用java脚本实现分布式锁

    转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/115.html?1455860390 edis被大量用在分布式的环境中,自 ...

  6. 在selenium2.0中使用selenium1.0的API

    Selenium2.0中使用WeDriver API对页面进行操作,它最大的优点是不需要安装一个selenium server就可以运行,但是对页面进行操作不如selenium1.0的Selenium ...

  7. 第二十三篇:在SOUI中使用LUA脚本开发界面

    像写网页一样做客户端界面可能是很多客户端开发的理想. 做好一个可以实现和用户交互的动态网页应该包含两个部分:使用html做网页的布局,使用脚本如vbscript,javascript做用户交互的逻辑. ...

  8. C++中嵌入Lua脚本环境搭建

    第一步(环境准备工作): 工具: ●LuaForWindows_v5.1.4-46.exe傻瓜式安装. 作用:此工具可以在windows环境下编译运行Lua脚本程序.安装完成后会有两个图标:Lua和S ...

  9. C++中调用Python脚本

    C++中调用Python脚本的意义就不讲了,至少你可以把它当成文本形式的动态链接库, 需要的时候还可以改一改,只要不改变接口, C++的程序一旦编译好了,再改就没那么方便了 先看Python的代码 代 ...

随机推荐

  1. C# 中的事件含义介绍

    AutoSizeChanged 当 AutoSize 属性的值更改时发生.(从 ButtonBase 继承.)   BackColorChanged 当 BackColor 属性的值更改时发生.(从 ...

  2. 利用Mathematica计算伴随矩阵

    AdjointMatrix[M_] := Module[{Ma, B, n, i, j}, Ma = Minors[M];   B = Ma;   n = Dimensions[M][[1]];   ...

  3. tuple解包给类的构造函数

    首先我们的第一步当然是将tuple解包.tuple提供了一个get函数来获取第N个元素.例如: get<1>(make_tuple(...)); 要将一个tuple全部拆解,就可以使用通过 ...

  4. storyBoard中切换应用启动的切入点方法

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launc ...

  5. Python深入05 装饰器

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 装饰器(decorator)是一种高级Python语法.装饰器可以对一个函数.方法 ...

  6. [ActionScript 3.0] LocalConnection示例

    下例包含两个 ActionScript 类,这两个类应当编译到两个单独的 SWF 文件中: 在 LocalConnectionSenderExample SWF 文件中,将创建 LocalConnec ...

  7. CRM SQL 共享

     共四步 ,) PRIMARY KEY CLUSTERED, objectid UNIQUEIDENTIFIER NOT NULL, objecttype INT NOT NULL) ,,'883D4 ...

  8. JAVA 回调

    一.定义        回调就是把函数指针做为参数传入,如函数A做为参数传入函数B,由B函数决定何时.何地调用函数A, function A() function B(A)    {         ...

  9. asp.net 自定义文本框

    using System;using System.Data;using System.Configuration;using System.Linq;using System.Web;using S ...

  10. 常用自动化测试工具介绍(支持B/S、C/S)

    一.功能测试工具1.QTP测试工具 全名HP QuickTest Professional software ,最新的版本为HP QuickTest Professional 11.0 QTP是qui ...