2018年12月28日 星期五

批次修改流程代理人啟用結束時間

UPDATE ProcessSubstituteDefinition
SET startSubstituteTime = '<開始代理 年年年年-月月-日日 時時:分分:秒秒.000>'
,endSubstituteTime = '<結束代理 年年年年-月月-日日 時時:分分:秒秒.000>'
,substituteOID = (SELECT OID FROM Users WHERE id = '<代理者工號>')
,objectVersion = objectVersion + 1
WHERE ownerOID = (SELECT OID FROM Users WHERE id = '<被代理者工號>');

發單時選錯部門導致跑到錯誤的直屬主管之解決方法

場景:
發單者有主(=TCM0131)部門及其他(=TCG0123)部門, 兩個部門直屬主管為不同人。
流程其中有關卡為發單者直屬主管。






發單時選錯部門。


被退回重辦, 但發單者再次派送, 系統卻不會再詢問要用哪個單位進行派送導致又送錯主管。
此時可以
1. 請User終止原流程, 重新發單。

2. 修正EasyFlow參考及發單部門欄位。

動作:
(1) 先退回發單者關卡。
(2) 修改DB:EFGP的Table:ProcessInstance流程資料, 把發單部門及參考部門都改為正確的部門。

SQL語法:
     DECLARE @UNIT_OID char(32) = (SELECT OID FROM OrganizationUnit WHERE id = '<正確部門代號>'); 

UPDATE ProcessInstance
SET referOrganizationUnitOID = @UNIT_OID, /**改這個欄位, 流程引擎在派送到下一關卡時會依照這個欄位判斷流向。*/ 
invokeOrganizationUnitOID = @UNIT_OID
,objectVersion = objectVersion + 1
WHERE serialNumber = <流程序號>;


(3) 重新派送, 發現已可到正確的直屬主管。


2018年12月26日 星期三

Chrome偵錯鼎新EasyFlow GP顯示空白

狀況:
開單後開啟[開發者工具], 發現source頁籤是空白, 無法debug。



解法:
(1)[開發者工具]在開啟的狀態下, 重新[發起流程]。

(2)在表單上按右鍵, 點[重新載入頁框]。

2018年12月10日 星期一

Visual Studio 2017新增Xamarin專案異常

參照此連結的解決方案, 都無效。
但將所有相關元件都更新完成後, 就已無異常。

新增專案(Cross-platform→行動應用程式→.NET standard)會顯示以下錯誤訊息。












1.更新Android專案的NuGet套件, Xamarin相關都要更新。



















2.Android→Android SDK管理員, 更新Android SDK。
(先確認好要安裝到哪些版本的Android, 下載對應的SDK。)


















2018年12月6日 星期四

Eclipse偵錯鼎新EasyFlow組織設計師

1.用文字編輯器開啟jnlp檔, 到server將<resources> tag內所有用到的jar檔下載到本地端。



2.下載Java Decompiler Eclipse套件


3.開啟Eclipse, 安裝之, 開啟class檔可顯示原始碼。



新增套件順序如下。









4.新增專案。



5.新增引用, 加入之前下載的jar檔。






6.偵錯組態新增遠端偵錯。



7.開啟source code, 找到要偵錯的段落, 加上中斷點。



8.以命令列執行jnlp檔, 程式不會顯示, 因為要等Eclipse連接上。
javaws.exe -J-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005 nana-organization-designer.jnlp


9.Eclipse執行偵錯, 組織設計師顯示畫面, 且執行到中斷點則會暫停。

2018年11月21日 星期三

2018年11月15日 星期四

EasyFlow GP 5.6使用jQuery插件

在EFGP的架構下有些地方要注意:

發現只要引用其他來源的jQuery,
如document.write(''); 雖然起單時無任何問題, 但在第2關會有派送履歷無法顯示的異常。
 


而且就算想用jQuery的noConflict()方法也不可行, 因為:
1.jQuery物件在EFGP被改名, 根本找不到。



2.$別名在EFGP已有別的用途。



解決方案:
查看EFGP的source code, 其本身也有jQuery library, 別名為【__jQuery】,
所以只要撰寫當var textBox1 = $(“#TextBox1”);
改為var textBox1 = __jQuery(“#TextBox1”);即可正常使用。

而jQuery插件也要配合修改(以jQuery Soap為例),


jQuery改為__jQuery即可。


2018年11月9日 星期五

Visual Studio Code插件Debugger for Chrome偵錯本機檔案

1.Visual Studio Code→開啟要偵錯的檔案的【所在資料夾】。

2.編輯偵錯組態檔launch.json如下:
{ 
/**使用 IntelliSense 以得知可用的屬性。*/
/**暫留以檢視現有屬性的描述。*/
/**如需詳細資訊,請瀏覽: https://go.microsoft.com/fwlink/?linkid=830387*/
"version": "0.2.0",
"configurations": [
{
"type": "chrome",
"request": "launch",
"name": "本機檔案偵錯",
/**"file": "${workspaceFolder}/<指定檔案名稱>",*/ /**-->每次都偵錯此檔案*/
"file": "${file}", /**-->或偵錯目前所編輯的檔案*/
"sourceMaps": true,
"userDataDir": "${workspaceFolder}/profile"
}
]
}

2018年11月6日 星期二

jQuery soap插件(jQuery呼叫.Net web service用)的使用方法

**IE瀏覽器**
網際網路選項→安全性→所對應的區域→自訂等級→存取跨網域的資料來源→啟用



引用如下:
<!--IE8只能用jQuery 1.x版本-->
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 
<script src="http://cdn.zoanmgtinc.com/j_query/plugin/soap/jquery.soap.js"></script>



方法如下:
 $.support.cors = true; /**修正"no transport"問題(for IE8, http://bugs.jquery.com/ticket/10660)*/
$.soap({
url: "http://xxx.xxx.xxx.xxx/WebSite1_T/Service.asmx",
method: "<方法名稱>",
SOAPAction: "http://tempuri.org/<方法名稱>",
envAttributes: {
"xmlns": "http://tempuri.org/"
},
data: {
Code: "", /**參數1*/
Display: true /**參數2*/
},
appendMethodToURL: false,
async: false,
success: function (soapResponse) {
/**成功時解析soapResponse的內容*/
/**建議用$(soapResponse.toString())轉成jQuery的xml物件以利操作*/
},
error: function (soapResponse) {
/**失敗時soapResponse會顯示伺服器回傳錯誤訊息*/
}
});



在web service伺服器的web.config的<configuration>節點底下加上
 <system.webServer> 
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="content-type, soapaction" />
<add name="Access-Control-Allow-Methods" value="*" />
</customHeaders>
</httpProtocol>
</system.webServer>

2018年10月26日 星期五

SOAPUI模擬request payload形式的POST請求

1.SOAPUI→REST Project 1→Request 1

2.Method:POST→Endpoint:主機名稱→Resource:web api url
3.Media Type:application/json→貼上Request payload的json

2018年10月24日 星期三

今天是[程式設計師節]!!

  ___ ___                               ___________   ________    _____ ._.
 /   |   \_____  ______ ______ ___.__. /_   \   _  \  \_____  \  /  |  || |
/    ~    \__  \ \____ \\____ <   |  |  |   /  /_\  \  /  ____/ /   |  || |
\    Y    // __ \|  |_> >  |_> >___  |  |   \  \_/   \/       \/    ^   /\|
 \___|_  /(____  /   __/|   __// ____|  |___|\_____  /\_______ \____   | __
       \/      \/|__|   |__|   \/                  \/         \/    |__| \/

2018年7月13日 星期五

Excel叫用Web service

1.VBA編輯器→工具→設定引用項目


2.增加Microsoft Office Soap Type Library v3.0
(路徑:C:\Program Files (x86)\Common Files\microsoft shared\OFFICE14\MSSOAP30.DLL)

Microsoft XML, v6.0


3.以下代碼叫用即可 
 Dim service As SoapClient30 

Dim result As MSXML2.IXMLDOMSelection '回傳結果
Dim isOk As MSXML2.IXMLDOMElement '回傳結果屬性(執行結果OK/NG)
Dim message As MSXML2.IXMLDOMElement '回傳結果屬性(返回訊息)
Dim value As MSXML2.IXMLDOMElement '回傳結果屬性(返回值)


Set service = New SoapClient30
Call service.MSSoapInit("WSDL的URL")

Set result = service.方法名稱("參數")
Set isOk = result.Item(0)
Set message = result.Item(1)
Set value = result.Item(2)

2018年6月26日 星期二

C# Roslyn Scripting API(程式靈活性上升, 但穩健性卻會大幅下降, 需配合大量[單元測試]服用!)

以呼叫轉換月份縮碼的方法為例:

該dll內容如下圖:


1.專案需加入該dll作為參考。




















2.重點是
Type.GetType(<該類別的AssemblyQualifiedName>).Assembly









3.執行結果如下圖:

2018年6月25日 星期一

clickonce執行script(Client端)

 @ECHO OFF
SET APP=%1
::此script檔執行需帶參數=%APP%

::建置ClickOnce專案
"MSBuild.exe" "<專案名稱>.csproj" /target:publish /property:Configuration=Debug;PublishUrl=\\<主機名稱>\%APP%;AssemblyName=%APP%;PublisherName=<公司名稱>;ProductName=%APP%;ApplicationRevision=1;MinimumRequiredVersion=1.0.0.1

::建立Deploy資料夾
wmic /node:'<主機名稱>' /user:<網域\管理者名稱> /password:'<管理者密碼>' process call create 'cmd.exe /c mkdir C:\%APP%'

::Deploy資料夾權限:everyone, 執行
wmic /node:'<主機名稱>' /user:<網域\管理者名稱> /password:'<管理者密碼>' process call create 'cmd.exe /c icacls C:\%APP% /grant "everyone:RX"'

::複製專案到資料夾
robocopy <專案名稱>\bin\Debug\app.publish \\<主機名稱>\C$\%APP% /MIR /Z /ZB /TBD /NP /R:5 /W:0 /MT:32

備份文件/清理電腦暫存檔的batch script

::備份我的文件夾
robocopy "<我的文件夾位置>" "<遠端備份主機位置>" /MIR /Z /ZB /TBD /NP /R:5 /W:0 /MT:32

::磁碟清理
%windir%\System32\cleanmgr.exe /SAGERUN:99

::清除暫存資料夾
%windir%\System32\cmd.exe /C DEL /F /S /Q %TEMP%\*
%windir%\System32\cmd.exe /C FOR /D %d IN (%TEMP%\"*") DO RMDIR "%d" /S /Q

::清理登錄檔null值
"C:\Program Files\RegDelNull\RegDelNull64.exe" -s hkcr
"C:\Program Files\RegDelNull\RegDelNull64.exe" -s hkcu
"C:\Program Files\RegDelNull\RegDelNull64.exe" -s hklm
"C:\Program Files\RegDelNull\RegDelNull64.exe" -s hku
"C:\Program Files\RegDelNull\RegDelNull64.exe" -s hkcc

2018年6月23日 星期六

單元測試需注意事項


狀況:
當使用TransactionScope將之前寫入資料庫動作撤銷,
專案有使用到EntityFramework及Dapper會遇到以下錯誤;

(1)顯示"No Entity Framework provider found for the ADO.NET provider with invariant name ‘System.Data.SqlClient'"錯誤
解法:EntityFramework的DbContext需新加建構式如下:

 public partial class xxxEntities {
public static xxxEntities Create() {
return new xxxEntities("name=xxxEntities");
}

private xxxEntities(string contextName) : base(contextName) {
var ensureDLLIsCopied = System.Data.Entity.SqlServer.SqlProviderServices.Instance;
}
}


參考:
[1]https://stackoverflow.com/questions/15088426/overriding-code-generated-dbcontext-constructor/15088572#15088572
[2]http://robsneuron.blogspot.com/2013/11/entity-framework-upgrade-to-6.html

(2)Dapper使用SqlConnection
會顯示"已停用分散式交易管理員 (MSDTC) 的網路存取。請使用元件服務系統管理工具啟用 DTC,以使用 MSDTC 安全性設定中的網路存取"
解法:在連線字串增加enlist=False, 避免觸發MSTDC

鎖定工作站語法(作成捷徑圖示可實現一鍵鎖定電腦)

C:\Windows\System32\rundll32.exe user32.dll,LockWorkStation

msdeploy執行script(Server端)

 @ECHO OFF
SET APP=%1
::此script檔執行需帶參數=%APP%


::置換Web.config DB連線字串
powershell -command "(Get-Content <專案路徑>\Web.config) -replace ('initial catalog=[a-zA-Z0-9]+;', 'initial catalog=%APP%;') | Out-File <專案路徑>\Web.config"


::建置專案
"MSBuild.exe" "<專案名稱>.csproj" /p:DeployOnBuild=true /property:Configuration=Debug


::建立資料夾在伺服器的C槽
wmic /node:'<主機名稱>' /user:<網域\管理者名稱> /password:'<管理者密碼>' process call create 'cmd.exe /c mkdir C:\%APP%'


::建立應用程序在伺服器IIS
wmic /node:'<主機名稱>' /user:<網域\管理者名稱> /password:'<管理者密碼>' process call create '%systemroot%\system32\inetsrv\appcmd.exe add APPPOOL /name:%APP% /managedRuntimeVersion:"v4.0" /managedPipelineMode:"Integrated" /startMode:AlwaysRunning /recycling.periodicRestart.time:00:00:00 /failure.rapidFailProtection:False /processModel.idleTimeoutAction:Suspend'
wmic /node:'<主機名稱>' /user:<網域\管理者名稱> /password:'<管理者密碼>' process call create '%systemroot%\system32\inetsrv\appcmd.exe add APP /path:/%APP% /physicalPath:C:\%APP% /site.name:"Default Web Site" /applicationPool:%APP% /preloadEnabled:True'
wmic /node:'<主機名稱>' /user:<網域\管理者名稱> /password:'<管理者密碼>' process call create '%systemroot%\system32\inetsrv\appcmd.exe set CONFIG "Default Web Site/%APP%" /section:urlCompression /doStaticCompression:True'
wmic /node:'<主機名稱>' /user:<網域\管理者名稱> /password:'<管理者密碼>' process call create '%systemroot%\system32\inetsrv\appcmd.exe set CONFIG "Default Web Site/%APP%" /section:urlCompression /doDynamicCompression:True'
wmic /node:'<主機名稱>' /user:<網域\管理者名稱> /password:'<管理者密碼>' process call create '%systemroot%\system32\inetsrv\appcmd.exe unlock CONFIG /section:anonymousAuthentication'
wmic /node:'<主機名稱>' /user:<網域\管理者名稱> /password:'<管理者密碼>' process call create '%systemroot%\system32\inetsrv\appcmd.exe set CONFIG "Default Web Site/%APP%" /section:anonymousAuthentication /enabled:True'


::設定應用程序的資料夾權限
wmic /node:'<主機名稱>' /user:<網域\管理者名稱> /password:'<管理者密碼>' process call create 'cmd.exe /c icacls C:\%APP% /grant "IIS AppPool\%APP%:F"'


::部署專案

"msdeploy.exe" -verb:sync -source:iisApp='<專案路徑>PackageTmp' -dest:iisApp='Default Web Site/%APP%',ComputerName='https://<主機名稱>:8172/msdeploy.axd',UserName='<主機名稱>\Administrator',Password='<管理者密碼>',AuthType='Basic',includeAcls='False' -disableLink:AppPoolExtension -disableLink:ContentExtension -disableLink:CertificateExtension -allowUntrusted


::連線字串加密

wmic /node:'<主機名稱>' /user:<網域\管理者名稱> /password:'<管理者密碼>' process call create 'aspnet_regiis.exe -pef connectionStrings C:\%APP%'



msdeploy(web deploy)後顯示錯誤連線{"初始化字串的格式和開始於索引 0 的規格不相符"}

狀況:
部署後在web.config的連線字串會變成$(ReplacableToken_連線字串名稱-Web.config Connection String_0)

解法:
在專案的csproj檔,在各組態的<PropertyGroup>都加入
<AutoParameterizationWebConfigConnectionStrings>False</AutoParameterizationWebConfigConnectionStrings>

來源:
https://docs.microsoft.com/zh-tw/aspnet/web-forms/overview/deployment/visual-studio-web-deployment/troubleshooting#format-of-the-initialization-string-does-not-conform-to-specification-starting-at-index-0

2018年5月30日 星期三

xlwings錯誤:module 'xlwings' has no attribute 'Book'

狀況:
Debug時會顯示錯誤,
訊息為module 'xlwings' has no attribute 'Book'




解法:
此錯誤是因為文件名稱(xlwings.py)跟module:xlwings相同所致,
將文件名稱改成其他名稱即可。

2018年5月24日 星期四

點擊Delphi專案檔時會顯示[傳送命令給程式時發生錯誤]而無法直接開啟

【狀況】
雙點dpr檔圖示(Delphi專案檔), 在開啟Delphi 時IDE卻顯示錯誤訊息,
而直接開啟一個空的作業環境。


【解法】
開啟{登錄編輯程式}。
搜尋{DelphiProject},展開並刪除{ddeexec}這個機碼。



將同階的{command}機碼的內容由
C:\Delphi6\Bin\Delphi32.exe /np
改為
C:\Delphi6\Bin\Delphi32.exe "%1"
即可。










2018年5月22日 星期二

執行遠端主機的DOS指令

用單引號將各參數內容包起來以避免特殊符號造成錯誤(Invalid Global Switch)
%windir%\System32\wbem\wmic.exe /node:'{遠端主機名稱}' /user:'{網域\使用者帳號}' /password:'{密碼}' process call create '{DOS指令}'

Web Deploy成功後執行指令

1.卸載專案



2.編輯專案組態檔
 


3.在最下面加上
<Target Name="{自訂Task名稱}" AfterTargets="MSDeployPublish" Condition="{在哪種組態下執行}">
<Exec Command="{自訂命令}" />
</Target>

2018年5月16日 星期三

開啟Delphi專案卻是其他專案路徑

狀況:
開啟A專案,一開始卻帶出B專案的檔案

原因:
在<專案名稱>.dsk會記錄關閉Delphi IDE前所開啟的檔案清單,
以利下次開啟時重新開啟加快使用者開發作業;

先關閉該檔,再重新開啟該專案即可。

2018年5月15日 星期二

增進開發效率的桌機設定

  1. 使用Ramdisk,並設定Windows/IE/Chrome/IIS暫存目錄路徑
  2. 優化記憶體設定,取消分頁檔及不需要開啟的服務等等
  3. Virtual Win設定2個虛擬桌面:桌面1為開發區,桌面2為除錯區
  4. 專案/我的文件夾/桌面路徑改設D槽,並設定自動備份排程
  5. 定期使用cleanmgr清除磁碟無效檔案
  6. 定期使用RegDelNull清除無效登錄檔
  7. 建立郵件分類規則

          2018年5月7日 星期一

          繼承的表單在設計工具檢視模式顯示錯誤訊息

          父表單如下












          子表單使用父表單的物件









          在設計工具檢視模式下會顯示錯誤訊息如下
          (1)並未將物件參考設定為物件的執行個體。



















          或(2)類似如 服務 System.Windows.Forms.Design.IEventHandlerService 已經存在於服務容器中。參數名稱: serviceType













          加上是否為DesignMode判斷式,編譯並重新打開設計工具檢視模式即可

          2018年5月2日 星期三

          檢查某目錄下檔案數量決定進行後續作業

           @ECHO OFF
          ::初始化變數[檔案數量]
          SET FileCount=0
          ::遍歷檔案,累加到[檔案數量]
          FOR %A IN (D:\WorkDirectory\*) DO SET /A FileCount+=1
          ::如果[檔案數量]大於等於100則進行後續作業
          IF %FileCount% GEQ 100 (ECHO "file count greater or equal to 100!")

          2018年4月30日 星期一

          GNU GLOBAL安裝/使用(for Windows)

          1. 下載GNU GLOBAL,解壓縮到C:\GLOBAL。
          2. 下載Python 3並安裝。
          3. 我的電腦→右鍵→內容→進階系統設定→環境變數→系統變數→Path→新增C:\GLOBAL\bin。
          4. 系統變數→新增變數名稱GTAGSCONF,變數值C:\GLOBAL\share\gtags\gtags.conf。
          5. 系統變數→新增變數名稱GTAGSLABEL,變數值pygments。
          6. 使用gtags --debug驗證安裝是否正常。
          7. 使用gtags產生索引檔GTAGS,GRTAGS,GPATH
          8. 使用htags產生索引網站,命令列參數:--alphabet --other --symbol --tree-view --frame --fixed-guide --line-number --verbose --warning


          2018年4月25日 星期三

          Delphi 6呼叫ASP.NET Web service

          1. 用WSDL Import將指定的 Web service 介面轉成 Delphi 的介面。
          2. 修改生成的檔案(如service.pas)
            [1]在RIO := THTTPRIO.Create(nil);的下一行加入
            RIO.HTTPWebNode.UseUTF8InHeader := True;

            [2]在InvRegistry.RegisterDefaultSOAPAction(TypeInfo(ServiceSoap), 'http://<命名空間>/%operationName%');的下一行加入
            InvRegistry.RegisterInvokeOptions(TypeInfo(ServiceSoap), ioDocument);
          3. 添加參考並使用介面提供的函數呼叫即可