利用asp.net Core開發webapi對接雲之家智慧審批資料互聯控制元件

王偉曄發表於2020-10-03

我們公司業務部門提出了一個合同管理的需求,

與金蝶的合同中沒有包括ERP或業務系統,

只有雲之家。

為了公司有限的IT預算,拼了。

 

步驟:

1、教程:使用 ASP.NET Core 建立 Web API 

     這一步,需要你用5分鐘,生產一個Webapi專案。

2、使用 Nginx 在 Linux 上託管 ASP.NET Core

     這一步,需要你用2分鐘,服務埠5000釋出到機器的80埠。

3、用花生殼域名將測試環境對映到外網

     這一步,需要你設定一個雲之家能找到服務的域名,我選的是內網穿透。

4、開始調整需要的程式碼。

4.1 修改api Controller 名稱

      * 如果雲之家後期測試找不到你的服務,我也不知道什麼原因。

        反正Visual Studio新建asp.net core MVC會有可能出現不明原因的訪問不了。

        按照第1個步驟新建一個webapi 一定沒錯

       有幾個檢查點需要注意,

4.1.1 這設定訪問的路徑,一般情況下不用改。釋出後都在根地址上訪問。

        例如, OptionsDataSourceController 訪問地址就是http://localhost:5000/OptionsDataSource

 

 

 

4.2.1 你可以忽略[HttpGet],你可以保留用作在瀏覽器測試伺服器是否正常。

 

 

 

4.2 你要修改好[HttpPost],整個*****Controller.cs只會有一個[HttpPost] Post(....)

 

 

 

 

 

5、根據需要定義OptionsDataSource等配套的資料格式。歡迎參考我的.cs檔案,基本與雲之家要求定義的一致即可。

5.1 在PageListData處理資料的分頁

5.2 新增資料篩選邏輯

 

 

 

 6. 釋出後,對接你的第三方資料互聯外掛即可。

 

 

以上寫的是路徑方法和要點,開發出的體驗基本雲之家的開發體驗一致。

如果您覺得有有幫助,記得點一下分享。

利用asp.net Core開發webapi對接雲之家智慧審批資料互聯控制元件
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using WebApi.Models;

namespace WebApi.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class OptionsDataSourceController : ControllerBase
    {
        private readonly ILogger<OptionsDataSourceController> _logger;

        public OptionsDataSourceController(ILogger<OptionsDataSourceController> logger)
        {
            _logger = logger;
        }

        //[HttpGet]
        //public ActionResult<OptionsDataSource<DataRowItem>> Get()
        //{
        //    ActionResult<OptionsDataSource<DataRowItem>> r = new ActionResult<OptionsDataSource<DataRowItem>>(new OptionsDataSource<DataRowItem>()
        //    {
        //        PageList = new PageListData<DataRowItem>()
        //        {
        //            ColList = new DataColumnItem[] {
        //                new DataColumnItem(){ ColEnName="id"},
        //                new DataColumnItem(){ ColEnName="cz",ColZhName="材質",ShowName="true",WidgetType="textWidget"}
        //            }
        //        }
        //    });
        //    r.Value.PageList.SetData(new DataRowItem[] {
        //        new DataRowItem(){Id="1",Cz="塑膠" },
        //        new DataRowItem(){Id="2",Cz="玻璃" },
        //        new DataRowItem(){Id="3",Cz="不鏽鋼" }
        //    }, 0);
        //    r.Value.Success = true;
        //    return r;
        //}

        [HttpPost]
        public ActionResult<OptionsDataSource<DataRowItem>> Post([FromBody] OptionsReqData reqarg )
        {
            string firstString = "塑膠";
            if (reqarg.Keyword != null)
            {
                firstString = reqarg.YzjInfo.Name;
            }
            ActionResult <OptionsDataSource<DataRowItem>> r=new ActionResult<OptionsDataSource<DataRowItem>>(new OptionsDataSource<DataRowItem>()
            {
                PageList = new PageListData<DataRowItem>() 
                {
                    ColList = new DataColumnItem[] {
                        new DataColumnItem(){ ColEnName="id"},
                        new DataColumnItem(){ ColEnName="cz",ColZhName="材質",ShowName="true",WidgetType="textWidget"}
                    }
                }
            });
            r.Value.PageList.SetData(new DataRowItem[] { 
                new DataRowItem(){Id="1",Cz=firstString },
                new DataRowItem(){Id="2",Cz="玻璃" },
                new DataRowItem(){Id="3",Cz="不鏽鋼" },
                new DataRowItem(){Id="4",Cz="不鏽鋼" },
                new DataRowItem(){Id="5",Cz="不鏽鋼" },
                new DataRowItem(){Id="6",Cz="不鏽鋼" },
                new DataRowItem(){Id="7",Cz="不鏽鋼" },
                new DataRowItem(){Id="8",Cz="不鏽鋼" },
                new DataRowItem(){Id="9",Cz="不鏽鋼" },
                new DataRowItem(){Id="10",Cz="不鏽鋼" },
                new DataRowItem(){Id="11",Cz="不鏽鋼" },
                new DataRowItem(){Id="12",Cz="不鏽鋼" },
                new DataRowItem(){Id="13",Cz="不鏽鋼" },
                new DataRowItem(){Id="14",Cz="不鏽鋼" },
                new DataRowItem(){Id="15",Cz="不鏽鋼" },
                new DataRowItem(){Id="16",Cz="不鏽鋼" },
                new DataRowItem(){Id="17",Cz="不鏽鋼" },
                new DataRowItem(){Id="18",Cz="不鏽鋼" },
                new DataRowItem(){Id="19",Cz="不鏽鋼" },
                new DataRowItem(){Id="20",Cz="不鏽鋼" },
                new DataRowItem(){Id="21",Cz="不鏽鋼" },
                new DataRowItem(){Id="22",Cz="不鏽鋼" },
                new DataRowItem(){Id="23",Cz="不鏽鋼" },
                new DataRowItem(){Id="24",Cz="不鏽鋼" }
            }.Where(k=>k.Cz.Contains(reqarg.Keyword.Trim())).ToArray(), reqarg.CurPage, reqarg.PageSize);
            r.Value.Success = true;
            return r;
        }
    }
}
View Code

 

 

利用asp.net Core開發webapi對接雲之家智慧審批資料互聯控制元件
using System;
using System.Linq;

namespace WebApi.Models
{
    public class OptionsDataSource<T>
    {
        public PageListData<T> PageList { get; set; }
        public string Error { get; set; }
        public int ErrorCode { get; set; }
        public bool Success { get; set; }
    }

    public class PageListData<T>
    {
        public int PageCount { get; set; }
        public int CurPage { get; set; }
        public int RowsCount { get; set; }
        public DataColumnItem[] ColList { get; set; }

        public T[] DataList { get; set; }
        public void SetData(T[] dataList, int curPage = 1, int pageSize = 10)
        {
            RowsCount = dataList.Length;
            PageCount = RowsCount / pageSize;
            CurPage = curPage;
            DataList = dataList.Skip((curPage - 1) * pageSize).Take(pageSize).ToArray();
        }
    }

    public class DataColumnItem
    {
        public string ColZhName { get; set; }
        public string ColEnName { get; set; }
        public string ShowName { get; set; }
        public string WidgetType { get; set; }
        public string DateFormat { get; set; }
    }

    public class DataRowItem
    {
        public string Id { get; set; }
        public string Cz { get; set; }
    }

    public class OptionsReqData
    {
        public int CurPage { get; set; }
        public int PageSize { get; set; }
        public string Keyword { get; set; }
        public YzjInfo YzjInfo { get; set; }
    }

    public class YzjInfo
    {
        public string Eid { get; set; }
        public string Oid { get; set; }
        public string JobNo { get; set; }
        public string Name { get; set; }

    }
}
View Code

 

相關文章