StringBuilder和string 线程安全

String类是不可变类,即一旦一个String对象被创建以后,包含在这个对象中的字符序列是不可改变的,直至这个对象被销毁。
StringBuffer
  StringBuffer对象则代表一个字符序列可变的字符串,当一个StringBuffer被创建以后,通过StringBuffer提供的append()、insert()、reverse()、setCharAt()、setLength()等方法可以改变这个字符串对象的字符序列。一旦通过StringBuffer生成了最终想要的字符串,就可以调用它的toString()方法将其转换为一个String对象。
 
StringBuilder类也代表可变字符串对象。实际上,StringBuilder和StringBuffer基本相似,两个类的构造器和方法也基本相同。不同的是:StringBuffer是线程安全的,而StringBuilder则没有实现线程安全功能,所以性能略高。
1、线程安全:
指多个线程在执行同一段代码的时候采用加锁机制,使每次的执行结果和单线程执行的结果都是一样的,不存在执行程序时出现e799bee5baa6e997aee7ad94e78988e69d8331333431353936意外结果。
2、线程不安全:
是指不提供加锁机制保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据。
举例说明:假设售票系统有1000张票,A和B同时来买票,如果是线程不安全,那么可能售票系统可能出现1000-1去同时执行的情况,最终结果是A和B都买完后剩下999张票,而不是998张。

posted @ 2020-05-15 10:27 青蛙學堂 阅读(300) | 评论 (0)编辑 收藏

JSON的简介


一、什么是JSON?

JSON是一种取代XML的数据结构,和xml相比,它更小巧但描述能力却不差,由于它的小巧所以网络传输数据将减少更多流量从而加快速度。

JSON就是一串字符串 只不过元素会使用特定的符号标注。

{} 双括号表示对象

[] 中括号表示数组

"" 双引号内是属性或值

: 冒号表示后者是前者的值(这个值可以是字符串、数字、也可以是另一个数组或对象)

所以 {"name": "Michael"} 可以理解为是一个包含name为Michael的对象

而[{"name": "Michael"},{"name": "Jerry"}]就表示包含两个对象的数组

当然了,你也可以使用{"name":["Michael","Jerry"]}来简化上面一部,这是一个拥有一个name数组的对象

二、JSON解析之传统的JSON解析

1、生成json字符串

public static String createJsonString(String key, Object value) {         JSONObject jsonObject = new JSONObject();         jsonObject.put(key, value);         return jsonObject.toString(); }


一、JSONObject和JSONArray的数据表示形式

  JSONObject的数据是用 {  } 来表示的,

        例如:   { "id" : "123", "courseID" : "huangt-test", "title" : "提交作业", "content" : null  }  

  而JSONArray,顾名思义是由JSONObject构成的数组,用  [ { } , { } , ......  , { } ]  来表示

       例如:   [ {  "id" : "123", "courseID" : "huangt-test", "title" : "提交作业" }  ,  {  "content" : null, "beginTime" : 1398873600000  "endTime" } ] ; 

        表示了包含2个JSONObject的JSONArray。

  可以看到一个很明显的区别,一个用的是 {  }  ,一个最外面用的是 [  ]  ;

 

二、如何从字符串String获得JSONObject对象和JSONArray对象

        JSONObject  jsonObject  = new JSONObject (String  str);

        JSONArray jsonArray = new JSONArray(String str  ) ;

 

三、如何从JSONArray中获得JSONObject对象

       大家可以把JSONArray当成一般的数组来对待,只是获取的数据内数据的方法不一样

       JSONObject   jsonObject = (JSONObject)jsonArray.get(i);

        JSONObject   jsonObject  =  jsonArray.getJSONObject(i) ;  

     两者都可。第一种注意转换 

 

四、获取JSON内的数据

       int   jid= jsonObject.getInt ( "id" ) ;    //  这里的jid得到的数据就是123.

       String  jcourse=jsonObject.getString( " courseID") ;   // 这里的jcourse得到的数据就是huangt-test.

      Strirng jcourse = jsonObject.get("courseID").toString();

 

 五、一般地为键值对

       eg:{  name:"xm", value:"张三"}

       String jname = null;

       if(jsonObject.get("name").equals("xm")){

         jname=jsonObject.get("value").toString();

       }

 

 六:  JSON.parse( str )    --> 把字符串转为JSON对象

         JSON.stringify( obj ) -->把对象解析为字符串

 


JSONObject、JSONArray区别

 json,就是一个键对应一个值,超级简单的一对一关系。现在用到的json那可以层层嵌套啊,刚开始接触的时候,确实有种崩溃的赶脚,不想去理,取个数据还那么麻烦。其实,就跟if else语句一样,如果if中套if,if中再套if,写的规范了还行,要是代码格式不规范,那我们肯定也看着麻烦。所以啊,对于json嵌套,只要记住符号“:”前是键,符号后是值大括号成对找,一层层剥开,就清楚了。 举个例子说明,如下:

[{name1:{name2:{name3:'value1',name4:'value2'}}},{}]

  从外到里看,例子中就是一个数组,数组里面是两个json格式的字符串。这样分析思路就清晰多了。

     工作中需要取出name4的值,你们会怎么取呢?。最初我都想过字符串截取,那时还不了解JSONArray,现在知道了,取出来也就相当容易了。

     取出name4值过程步骤:1,将以上字符串转换为JSONArray对象;2,取出对象的第一项,JSONObject对象;3,取出name1的值JSONObject对象;4,取出name2的值JSONObject对象;5,取出name4的值value2。

    示例中json数组格式的字符串可以通过方法直接转换为JSONArray的格式:

  JSONArray.fromObject(String)

  1. JSONArray getJsonArray=JSONArray.fromObject(arrayStr);//将结果转换成JSONArray对象的形式  
  2. JSONObject getJsonObj = getJsonArray.getJSONObject(0);//获取json数组中的第一项  
  3. String result=getJsonObj.getJSONObject("name1").getJSONObject("name2").getJSONObject("name4"); 

好了我们说说这两个对象。

1,JSONObject

  json对象,就是一个键对应一个值,使用的是大括号{ },如:{key:value}

2,JSONArray

  json数组,使用中括号[ ],只不过数组里面的项也是json键值对格式的

  Json对象中添加的是键值对,JSONArray中添加的是Json对象

  1. JSONObject Json = new JSONObject();  
  2. JSONArray JsonArray = new JSONArray();  
  3.   
  4. Json.put("key", "value");//JSONObject对象中添加键值对  
  5. JsonArray.add(Json);//将JSONObject对象添加到Json数组中  

3,JSONObject与Map

    Map map和json都是键值对,不同的是map中键值对中间用等号分开,json中键值对中间用冒号分开。其实json就是一种特殊形式的map。

  1. Map<String,String> strmap=new JSONObject();  

    这里的需求是:request对象获取的map,想要返回json格式也不用白费力了。

posted @ 2020-05-14 16:20 青蛙學堂 阅读(199) | 评论 (0)编辑 收藏

用友U8 归纳采购退货结算三种情况

用友U8 归纳采购退货结算三种情况

对应版本: 8.52

问题现象: 客户经常处理退货结算的问题

问题原因: 应系统掌握各种情况

解决方案: 

结算前全额退货
即已录入采购入库单,但未进行采购结算,并且全额退货。
填制一张全额数量的红字采购入库单。
把这张红字采购入库单与原入库单进行结算,冲抵原入库单数据。

结算前部分退货
即已录入采购入库单但未进行采购结算,并且部分退货。
填制一张部分数量的红字采购入库单。
填制一张相对应的采购发票,其中发票上的数量=原入库单数量-红字入库单数量。
把这张红字入库单与原入库单、采购发票进行结算,冲抵原入库单数据。 

结算后退货
即已录入采购入库单、采购发票,并且已进行了采购结算。
填制一张红字采购入库单,再填制一张红字发票。
把这张退货单与红字发票进行结算,冲抵原入库单数据。
当收到供货单位开具的红字(负数)发票,可分以下情况进行结算:
货物未入库的红字发票结算:没有对应的入库单,采用【手工结算】,不选入库单,直接选择原兰字发票和红字发票进行结算。
货物已退货的红字发票结算:在取得供货单位的退货发票后,进行结算。如果退货单与退货发票一致,可以〖自动结算〗,否则采用〖手工结算〗。

posted @ 2020-05-13 13:35 青蛙學堂 阅读(505) | 评论 (0)编辑 收藏

Bootstraptable入门-合并存储格

@{
    ViewBag.Title = "Index2";
}
json文件:

{  
"total":25,  
    "rows":[
        {
        "id":1,
        "Name":"xiaoming1",
        "Mobile":"222",
"Note":"diyihang"
        },
        {
        "id":2,
        "Name":"xiaoming2",
        "Mobile":"3333",
"Note":"dier"
        },
{
        "id":3,
        "Name":"xiaoming2",
        "Mobile":"34444",
"Note":"didssssss"
        }
,
{
        "id":4,
        "Name":"xiaoming4",
        "Mobile":"6555544",
"Note":"did5555ss"
        }
    ]
}
<script src="~/Content/bootstrap/jquery-3.4.1.min.js"></script>
 <link rel="stylesheet" href="~/Content/bootstrap/css/bootstrap.min.css">
<script src="~/Content/bootstrap/js/bootstrap.min.js"></script>
 <link rel="stylesheet" href="~/Content/bootstraptable/bootstrap-table.css">
 
<script src="~/Content/bootstraptable/bootstrap-table.js"></script>
 
<script src="~/Content/bootstraptable/extensions/editable/bootstrap-table-editable.js"></script>
 <--汉化文件 -->
 <script src="~/Content/bootstraptable/locale/bootstrap-table-zh-CN.js"></script>
 
 <--table-->
<table id="table2"></table>
 <--grid-->
<table id="grid"></table>
 <--list-->
<table id="_list"></table>
<script type="text/javascript" >
     
    
    $('#table2').bootstrapTable({
        url: '/data1.json',
        columns: [{
            field: 'id',
            title: '序号'
        }, {
            field: 'name',
            title: '名称'
        }, {
            field: 'price',
            title: '价格'
        }, ]
    });
    
    //
   
    var $table;
    //初始化bootstrap-table的内容
   // function InitMainTable() {
        //记录页面bootstrap-table全局变量$table,方便应用
       // var queryUrl = '/TestUser/FindWithPager?rnd=' + Math.random()
        var queryUrl = '/data3.json';
              
      //  $table =
            $('#grid').bootstrapTable({
            url: queryUrl,                      //请求后台的URL(*)
            method: 'GET',                      //请求方式(*)
            //toolbar: '#toolbar',              //工具按钮用哪个容器
            striped: true,                      //是否显示行间隔色
            cache: false,                       //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*)
            pagination: false,                   //是否显示分页(*)
            sortable: true,                     //是否启用排序
            sortOrder: "asc",                   //排序方式
            sidePagination: "server",           //分页方式:client客户端分页,server服务端分页(*)
            pageNumber: 1,                      //初始化加载第一页,默认第一页,并记录
            //rows
            pageSize: 2,                     //每页的记录行数(*)
            pageList: [10, 25, 50, 100],        //可供选择的每页的行数(*)
            search: false,                      //是否显示表格搜索
            strictSearch: true,
            showColumns: true,                  //是否显示所有的列(选择显示的列)
            showRefresh: true,                  //是否显示刷新按钮
            minimumCountColumns: 2,             //最少允许的列数
            clickToSelect: true,                //是否启用点击选中行
            //height: 500,                      //行高,如果没有设置height属性,表格自动根据记录条数觉得表格高度
            uniqueId: "ID",                     //每一行的唯一标识,一般为主键列
            showToggle: true,                   //是否显示详细视图和列表视图的切换按钮
            cardView: false,                    //是否显示详细视图
            detailView: false,                  //是否显示父子表
            //得到查询的参数
            queryParams: function (params) {
                //这里的键的名字和控制器的变量名必须一致,这边改动,控制器也需要改成一样的
                var temp = {
                    rows: params.limit,                         //页面大小
                    page: (params.offset / params.limit) + 1,   //页码
                    sort: params.sort,      //排序列名  
                    sortOrder: params.order //排位命令(desc,asc) 
                };
                return temp;
            },
            columns: [
                {
                checkbox: true,
                visible: true                  //是否显示复选框  
                },
            {
                field: 'Name',
                title: '姓名',
                sortable: true
            }, {
                field: 'Mobile',
                title: '手机',
                sortable: true
            }, 
            {
                field: 'Note',
                title: '备注'
            },
            {
                field: 'id',
                title: '操作',
                width: 120,
                align: 'center',
                valign: 'middle',
                formatter: actionFormatter
            }, ],
            onLoadSuccess: function () {
            },
            onLoadError: function () {
                showTips("数据加载失败!");
            },
            onDblClickRow: function (row, $element) {
                var id = row.ID;
                EditViewById(id, 'view');
            },
        });
  //  };
    //
    function actionFormatter(value, row, index) {
        var id = value;
        var result = "";
        result += "<a href='javascript:;' class='btn btn-xs green' onclick=\"EditViewById('" + id + "', view='view')\" title='查看'><span class='glyphicon glyphicon-search'></span></a>";
        result += "<a href='javascript:;' class='btn btn-xs blue' onclick=\"EditViewById('" + id + "')\" title='编辑'><span class='glyphicon glyphicon-pencil'></span></a>";
        result += "<a href='javascript:;' class='btn btn-xs red' onclick=\"DeleteByIds('" + id + "')\" title='删除'><span class='glyphicon glyphicon-remove'></span></a>";
        return result;
    }
    /*
     
     queryParams : function (params) {
                    //这里的键的名字和控制器的变量名必须一直,这边改动,控制器也需要改成一样的
                    var temp = $("#ffSearch").serializeJsonObject();
                    temp["rows"] = params.limit;                        //页面大小
                    temp["page"] = (params.offset / params.limit) + 1;  //页码
                    temp["sort"] = params.sort;                         //排序列名
                    temp["sortOrder"] = params.order;                   //排位命令(desc,asc) 
                    //特殊格式的条件处理
                    temp["WHC_Age"] = $("#WHC_Age").val() + "~" + $("#WHC_Age2").val();
                    temp["WHC_BirthDate"] = $("#WHC_BirthDate").val() + "~" + $("#WHC_BirthDate2").val();
                    return temp;
                },
    //连接字段格式化
            function linkFormatter(value, row, index) {                
                return "<a href='" + value + "' title='单击打开连接' target='_blank'>" + value + "</a>";
            }
            //Email字段格式化
            function emailFormatter(value, row, index) {
                return "<a href='mailto:" + value + "' title='单击打开连接'>" + value + "</a>";
            }
            //性别字段格式化
            function sexFormatter(value) {
                if (value == "女") { color = 'Red'; }
                else if (value == "男") { color = 'Green'; }
                else { color = 'Yellow'; }
    
                return '<div  style="color: ' + color + '">' + value + '</div>';
            }
     */
     window.onload = dosearch();
    ///加载抽检列表
    function dosearch() {
        //先销毁表格  
        $("#_list").bootstrapTable('destroy');
        //初始化表格,动态从服务器加载数据  
        $("#_list").bootstrapTable({
            method: "get",  //使用get请求到服务器获取数据  
            contentType: "application/x-www-form-urlencoded",//一种编码。好像在post请求的时候需要用到。这里用的get请求,注释掉这句话也能拿到数据
         //   url: "ReportControl.ashx", //获取数据的Servlet地址  
            url: "/data3.json",
            dataType: "json",
            dataField: "rows",//这是返回的json数组的key.默认好像是"rows".这里只有前后端约定好就行
            //height: tableHeight(),//高度调整
            //striped: true,  //表格显示条纹  
            pagination: false, //启动分页  
            pageNumber: 1, //当前第几页  
            pageSize: 300, //每页显示的记录数 
            pageList: [5, 10, 20, 30],//分页步进值
            clickToSelect: true,//是否启用点击选中行
            locale: 'zh-CN',//中文支持,
            paginationPreText: '<',//指定分页条中上一页按钮的图标或文字,这里是<  
            paginationNextText: '>',//指定分页条中下一页按钮的图标或文字,这里是> 
            search: false,  //是否启用查询  
            showColumns: false,  //显示下拉框勾选要显示的列  
            showRefresh: false,  //显示刷新按钮  
            sidePagination: "server", //表示服务端请求  
            //设置为undefined可以获取pageNumber,pageSize,searchText,sortName,sortOrder  
            //设置为limit可以获取limit, offset, search, sort, order  
            queryParamsType: '',//查询参数组织方式
            idField: "ID",//指定主键列  
            queryParams: function (params) {//自定义参数,这里的参数是传给后台的,我这是是分页用的  
                return {//这里的params是table提供的  
                    pagesize: params.pageSize,             //每页多少条数据
                    pageindex: params.pageNumber,       //请求第几页
            /*
                    budgetyear: escape($("#inBudgetYear").val()),
                    budgetmonth1: escape($("#inBudgetMonth1").val()),
                    budgetmonth2: escape($("#inBudgetMonth2").val()),
                    budgetcompany: escape($("#inBudgetCompany").val()),
                    departid: escape($("#h_newDepart").val()),
                    execdepart: $('#inResult1').is(':checked'),
                    companyin: $('#inResult2').is(':checked')
                    */
                };
            },
            //请求服务器时所传的参数
            onLoadSuccess: function () {  //加载成功时执行  
              //  layer.msg("加载成功");
                mergeTable("Name");
            },
            onLoadError: function () {  //加载失败时执行  
              //  layer.msg("加载数据失败", { time: 1500, icon: 2 });
            },
            columns: [
                {
                    checkbox: true
                }, {
                    title: '序号',//标题  可不加  
                    formatter: function (value, row, index) {
                        return index + 1;
                    }
                }, {
                    field: "id",
                    title: "ID",
                    visible: false, //是否显示
                },  {
                    field: "Name",
                    title: "名称",
                },  {
                    field: "Mobile",
                    title: "手机"
                }, {
                    field: "Note",
                    title: "备注"
                }
            ]
        });
    }
    
    /*
    //可以加多个
     $('#table').bootstrapTable('mergeCells', {
                index : 0,
                field : "pairs_all",
                rowspan : data.length
           });
 
    */
    function mergeTable(field) {
        $table = $("#_list");
        var obj = getObjFromTable($table, field);
        for (var item in obj) {
            
            $('#_list').bootstrapTable('mergeCells', {
                index: obj[item].index,
                field: field,
                colspan: 1,
                rowspan: obj[item].row
            });
        }
    }
    function getObjFromTable($table, field) {
        var obj = [];
        var maxV = $table.find("th").length;
        var columnIndex = 0;
        var filedVar;
        for (columnIndex = 0; columnIndex < maxV; columnIndex++) {
            filedVar = $table.find("th").eq(columnIndex).attr("data-field");
            if (filedVar == field) break;
        }
        var $trs = $table.find("tbody > tr");
        var $tr;
        var index = 0;
        var content = "";
        var row = 1;
        for (var i = 0; i < $trs.length; i++) {
            $tr = $trs.eq(i);
            var contentItem = $tr.find("td").eq(columnIndex).html();
            //exist
            if (contentItem.length > 0 && content == contentItem) {
                row++;
            } else {
                //save
                if (row > 1) {
                    obj.push({ "index": index, "row": row });
                }
                index = i;
                content = contentItem;
                row = 1;
            }
        }
        if (row > 1) obj.push({ "index": index, "row": row });
        return obj;
    }
    
</script>

posted @ 2020-05-08 15:56 青蛙學堂 阅读(575) | 评论 (0)编辑 收藏

Bootstraptable入门

     摘要: 一、什么是Bootstrap-table?  在业务系统开发中,对表格记录的查询、分页、排序等处理是非常常见的,在Web开发中,可以采用很多功能强大的插件来满足要求,且能极大的提高开发效率,本随笔介绍这个bootstrap-table是一款非常有名的开源表格插件,在很多项目中广泛的应用。Bootstrap-table插件提供了非常丰富的属性设置,可以实现查询、分页、排序、复选框、设置显示列、Car...  阅读全文

posted @ 2020-05-08 11:21 青蛙學堂 阅读(191) | 评论 (0)编辑 收藏

交叉连接CROSS JOIN

如果不带WHERE条件子句,它将会返回被连接的两个表的笛卡尔积,返回结果的行数等于两个表行数的乘积;  举例,下列A、B、C 执行结果相同,但是效率不一样:  A:SELECT * FROM table1 CROSS JOIN table2  B:SELECT * FROM table1,table2   C:select * from table1 a inner join table2 b  A:select a.*,b.* from table1 a,table2 b where a.id=b.id  B:select * from table1 a cross join table2 b where a.id=b.id (注:cross join后加条件只能用where,不能用on)  C:select * from table1 a inner join table2 b on a.id=b.id  一般不建议使用方法A和B,因为如果有WHERE子句的话,往往会先生成两个表行数乘积的行的数据表然后才根据WHERE条件从中选择。   因此,如果两个需要求交际的表太大,将会非常非常慢,不建议使用。

posted @ 2020-04-28 17:08 青蛙學堂 阅读(123) | 评论 (0)编辑 收藏

PIVOT行转列

在数据库操作中,有些时候我们遇到需要实现“行转列”的需求,例如一下的表为某店铺的一周收入情况表:

WEEK_INCOME(WEEK VARCHAR(10),INCOME DECIMAL)
我们先插入一些模拟数据:

INSERT INTO WEEK_INCOME 
SELECT '星期一',1000
UNION ALL
SELECT '星期二',2000
UNION ALL
SELECT '星期三',3000
UNION ALL
SELECT '星期四',4000
UNION ALL
SELECT '星期五',5000
UNION ALL
SELECT '星期六',6000
UNION ALL
SELECT '星期日',7000
********************************************
 SELECT WEEK,INCOME FROM WEEK_INCOME
 SELECT  
SUM(CASE WEEK WHEN '星期一' THEN INCOME END) AS [星期一],
SUM(CASE WEEK WHEN '星期二' THEN INCOME END) AS [星期二],
SUM(CASE WEEK WHEN '星期三' THEN INCOME END) AS [星期三],
SUM(CASE WEEK WHEN '星期四' THEN INCOME END) AS [星期四],
SUM(CASE WEEK WHEN '星期五' THEN INCOME END) AS [星期五],
SUM(CASE WEEK WHEN '星期六' THEN INCOME END) AS [星期六],
SUM(CASE WEEK WHEN '星期日' THEN INCOME END) AS [星期日]
FROM WEEK_INCOME
 
 
SELECT [星期一],[星期二],[星期三],[星期四],[星期五],[星期六],[星期日]
FROM WEEK_INCOME
PIVOT
(
    SUM(INCOME) for [week] in([星期一],[星期二],[星期三],[星期四],[星期五],[星期六],[星期日])
)TBL33
 


posted @ 2020-04-24 17:07 青蛙學堂 阅读(134) | 评论 (0)编辑 收藏

存储过程中的临时表为什么以#开头?#是不是有特殊的含义

你要理解为什么要用临时表,其实临时表又称为过渡表。

临时表有两种类型:本地和全局。它们在名称zhidao、可见性以及可用性上有区别。本地临时表的名称以单个数字符号 (#) 打头;它们仅对当前的用户连接是可见的;当用户从 SQL Server 实例断开连接时被删除。全局临时表的名称以两个数字符号 (##) 打头,创建后对任何用户都是可见的,当所有引用该表的用户从 SQL Server 断开连接时被删除。

存储过程sql语句拼接:

注意引号数量
 SELECT @sql = @sql + ' and  发生日期 >='+''''+ @bgdate+ ''''+' and  发生日期 <='+''''+ @eddate +''''
  SELECT @sql = @sql + '  and 名称 like  '+'''%abc%'''+' '


 SELECT @sql = @sql + '     and  id= '+@id+   ''

posted @ 2020-04-18 14:31 青蛙學堂 阅读(220) | 评论 (0)编辑 收藏

IE网址中文加密解密-乱码

script 网址中文加密函数
加密
encodeURI()
  解密
 Convert.ToString(  System.Web.HttpUtility.UrlDecode( ""  ))
 
c# 网址 中文加密解密
public Encoding encoding()
      
  {
           
 string browser = Request.Browser.Type.ToUpper();
          
  if (browser.Contains("IE") == true)
         
   {
               
 return Encoding.Default;
        
    }
           
 else
          
  {
            
    return Encoding.UTF8;
  
          }
     
   }
 
加密函数
HttpUtility.UrlEncode(“cookies值”, encoding())
解密函数
 HttpUtility.UrlDecode(Hc.Values[pitem], encoding);

posted @ 2020-03-27 09:03 青蛙學堂 阅读(228) | 评论 (0)编辑 收藏

u8添加客制按钮

在Meta库中Meta库.AA_Customerbutton中,一行数据代表一个按钮
INSERT INTO [UFMeta_1657].[dbo].[AA_CustomerButton]
           ([cButtonID]
           ,[cButtonKey]
           ,[cButtonType]
           ,[cProjectNO]
           ,[cFormKey]
           ,[cVoucherKey]
           ,[cKeyBefore]
           ,[iOrder]
           ,[cGroup]
           ,[cCustomerObjectName]
           ,[cCaption]
           ,[cLocaleID]
           ,[cImage]
           ,[cToolTip]
           ,[cHotKey]
           ,[bInneralCommand]
           ,[cVariant]
           ,[cVisibleAsKey]
           ,[cEnableAsKey])
     VALUES
           (<cButtonID, uniqueidentifier,>
           ,<cButtonKey, nvarchar(50),>
           ,<cButtonType, nvarchar(50),>
           ,<cProjectNO, nvarchar(50),>
           ,<cFormKey, nvarchar(50),>
           ,<cVoucherKey, nvarchar(50),>
           ,<cKeyBefore, nvarchar(50),>
           ,<iOrder, nvarchar(50),>
           ,<cGroup, nvarchar(50),>
           ,<cCustomerObjectName, nvarchar(100),>
           ,<cCaption, nvarchar(100),>
           ,<cLocaleID, nvarchar(50),>
           ,<cImage, nvarchar(100),>
           ,<cToolTip, nvarchar(200),>
           ,<cHotKey, nvarchar(50),>
           ,<bInneralCommand, int,>
           ,<cVariant, nvarchar(400),>
           ,<cVisibleAsKey, nvarchar(100),>
           ,<cEnableAsKey, nvarchar(100),>)
GO
cButtonID cButtonKey cButtonType cProjectNO cFormKey cVoucherKey
cKeyBefore iOrder cGroup cCustomerObjectName cCaption cLocaleID cImage
cToolTip cHotKey bInneralCommand cVariant cVisibleAsKey cEnableAsKey
45814D73 DAction_C default U8Custdef NULL 88
Refresh 0 IEDIT UFIDA.U8.UAP.Plugin.AddButton.clsbdpo 采购合同 zh-cn print 
current 生成采购合同 Ctrl+N 1 CustomPrintA modify Refresh
******************************************************8
UFIDA.U8.UAP.Plugin.AddButton.clsdpo为dll程序集
需要注册
注册方法
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\regasm.exe /tlb c:\U8SOFT\UAP\Runtime\CustomAction.dll
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\regasm.exe  c:\U8SOFT\UAP\Runtime
\UFIDA.U8.UAP.Plugin.AddButton.dll
在命令行执行或者存入*.bat文件
新建一个VB类,并写入以下方法即可 ‘执行按钮,objVoucher为单据或列表对象&
varentValue为在表中预置的cVariant的值

posted @ 2020-03-10 11:08 青蛙學堂 阅读(1009) | 评论 (0)编辑 收藏

仅列出标题
共43页: First 4 5 6 7 8 9 10 11 12 Last 
<2024年4月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

导航

统计

常用链接

留言簿(8)

随笔分类

随笔档案

收藏夹

青蛙学堂

最新评论

阅读排行榜

评论排行榜