2015年4月24日 星期五

Scriptcase 裡面,如何取得上層ap的欄位值

如題

只能透過 [session variable]做了。

ScriptCase 的 Form 裡面 --> Fields --> 要的欄位 --> Save Variable:yes --> Variable Name: [xxxxxx]

這樣,就可以在 detail 中使用 該 Session Variable了。


而 sc_master_value('Object', Value) 這個 macro 則是可以 更新 上層ap 欄位的值

Update a data in the Master application in real time according to changes made in a given field of the Detail application.

2015年4月23日 星期四

php 加減

有些數字必須這樣處理,才能加減!
floatval(preg_replace("/[^-0-9\.]/","",$orders_shipment_id));
$total2 = floatval(preg_replace("/[^-0-9\.]/","",$total)) + floatval(preg_replace("/[^-0-9\.]/","",$ship_fees));

2015年4月22日 星期三

Scriptcase裡Form的 master/detail

ScriptCase 的 Form 裡面的 Master/ Detail 是建立一對多的關聯資料,detail 部分,可以連結到 Grid 或是 Form 都可以。

Grid 當然就是只有可以看,不能編輯、修改;而要期待能編輯、新增、修改、刪除,就必須使用 Form 裡面的 Multiple Records / Editable Grid / Editable Grid view ,咦?好像也可以使用 Single Record喔!就是出現時是一筆一筆出來的。

2015年4月20日 星期一

ScriptCase 裡面的 Link

如果Application 是 Form,允許的 Link 有:Application 、 Capture 兩種

Application Link :
  • Application - Used to link our form to any other type of application. This linking type is associated to events of Inclusion and/or alteration, when occurs one of those events the navigation will be effected to the application that we are calling.
Capture Link :
  • Capture - Will be created an icon  beside the field inside the form, when being selected it opens other window showing a search application. In this application that will be opened can do searches and return a value to text field.
  • 選了 Capture 以後,會出現一個欄位選擇,然後選擇一個 Grid 的 Application,此 Grid Application,即是產生來讓使用者選擇欄位值的。
  • 注意:選擇連結Capture 的欄位型態不能是<Select>,能夠是 <text>/<integer>等開放輸入欄位,不能是選擇式的,因為,那功能是一樣的,列出來選擇。我試了,如果是<select>,縱使再建立此 Capture Link 也一樣沒有連結東西,將<select>改成<integer> 就有聯結了!

Form 裡面的 fields 如果是 <select> type 的話,在此欄位旁邊可以加上一個 Link到form的連結,這個Link 就只是 Link 過去 edit 一個Form而已,沒有傳參數過去,同時顯示"EDIT"(中文"更改")的一個button。可以打開該欄位內容的 Form 去更改數值。


如果 Application 是 Grid的話,允許的 Link 有:Application 、 Field、Capture 三種

Application Link :

Field Link :

Capture Link :




2015年4月19日 星期日

scriptcase 的bug

好像還蠻多bugs的


  • master/detail 的 detail (用form做的) 設定沒有AUDI,但 Deploy之後就有!

在 master/detail 的欄位裡, 設定 detail 沒有新增,但一deploy以後,就一定有"新增"/修改/刪除,奇怪

後來,只好改用 grid 來做 detail ,那也可以啦

註:我今天是(20150810)卻發生 Master/Detail裡的Detail設定有AUDI,在開發環境跑都正常,depoly以後,AUDI不見了!太奇怪了!

  • master/detail-->update_master
建立一個訂單,以及訂單明細,兩個Forms,並在訂單中建立了 master/detail。設計了一個update_master() php程式,更改了 orders table 裡面的 total 欄位,並 呼叫 sc_master_value() 更新 master form裡面的  field ,然後,在 Events  裡面設定,onAfterInsert/onAfterUpdate/onAfterDelete 都呼叫 update_master()函數,結果發現為何資料庫有更新而 master fields沒有更新呢?原來發現,detail form 裡面的  "Form Formats"->"Editable Grid view"-> "Use modal form to edit"->要選擇"No",如果選擇 "yes" ,那麼,onAfterUpdate並不會被執行!
這應該是一個 bug 吧!



使用心得:
如果希望 Master/Detail 裡的Detail 需要可以新增刪除修改,那就用 FORM Application來做Detail,而如果希望Detail只需要查詢顯示,不希望可以被編輯,那就使用 GRID Application 來做Detail。

因為,試了很多次,Scriptcase裡面的 Detail 使用Form來製作的話,經常出現問題!
原本在開發環境有AUDI 的,Deploye以後,變不行了!反之亦然!不知道為什麼!




2015年4月12日 星期日

ScriptCase 的Application 管理

由於在 ScriptCase 裡面,要建立一個 Application 非常容易,所以,很容易就建立了一堆的 Application,然後,久而久之,你就忘了,當初建立它的作用是什麼?亂了!

許多Application 會是另一個 app 的master/detail 裡面的 detail,是他的一部分。此部分,也可以另外單獨執行,可是不一定適合使用。
也有可能被共用!所以,很容易亂掉。
所以,規畫就很重要。
另外,運用 Folder 來分類。

例如:屬於 member的部分app,都放在這個folder裡面,使用到的 detail app ,也放到這裡來,較不會亂。

2015年4月11日 星期六

ScriptCase 裡配合Javascript製作一個button的方法範例

很好的參考範例:

http://www.scriptcase.net/forum/showthread.php?7633-Best-way-to-do-this-in-Scriptcase-Display-Nicely-as-one-field-edit-as-multiple


Block1: 2 Label fields ({myaddress}, {mybtn}).

Block2: Address fields.

Create a javascript method (switchBlocks) with a variable (vswitch) to be passed in.

Code:
if(vswitch == 1)
{
document.getElementById('div_hidden_bloco_0').style.display = 'none'; //you need to determine the number of the block by inspecting the element in the browser
document.getElementById('div_hidden_bloco_1').style.display = 'block';
}
else
{
document.getElementById('div_hidden_bloco_0').style.display = 'block';
document.getElementById('div_hidden_bloco_1').style.display = 'none';
}
Create a php method (call_switchBlocks):
Code:
sc_ajax_javascript('switchBlocks',array(0)); //we need this because we can't call javascript from the onLoad event
onLoad:
Code:
{myaddress} = {name}.'<br>'.{address1}.'<br>'.{city};
{mybtn} =  "<button type='button' onclick='switchBlocks(1)'>Edit</button>"; //could be beefed up with some css
call_switchBlocks();
onAfterUpdate:
Code:
call_switchBlocks();
That should give you a start.

另一個案例:

自行建立欄位:{sam_addr_btn}

在 onLoad Event裡建立
{same_addr_btn1}="<button type='button' onclick='sameaddress1()'>Same Address</button>";
在 Javascript Methods建立一個 sameaddress
code:
$("select[name$='m_country_id']" ).val($("select[name$='country_id']").val()); 
$("input[name$='m_state']" ).val($("input[name$='state']").val()); 
$("input[name$='m_city']" ).val($("input[name$='city']").val()); 
$("input[name$='m_postcode']" ).val($("input[name$='postcode']").val()); 
$("input[name$='m_street1']" ).val($("input[name$='street1']").val());
$("input[name$='m_street2']" ).val($("input[name$='street2']").val());



2015年4月8日 星期三

ScriptCase 的 Radio

如果給 Radio 一個空值,結果 Radio 不會空白!

而,Select 會留在Title上面,Radio不會,唉!只好把 Radio 改為 Select

ScriptCase 裡 Select 對應資料欄位不可以使用 ZEROFILL

如題,
如果將欄位設為 ZEROFILL 在ScriptCase裡恐怕會是災難!因為,ScriptCase裡面好像不認得這種欄位設定!會搞得很慘!
我把 ZEROFILL屬性拿掉,就正常了!

呼!搞了半天!花費我好幾個小時的時間,以為撞鬼了!軟體不會撞鬼,只有自己不知道錯在哪裡而已,唉!

記下來,以後不要犯一樣的錯!

2015年4月5日 星期日

ScriptCase 的 Form 裡的 Checkbox 整列設定on/off

Form 有四種類型:
1. Single Record
2. Multiple Record
3. Editable Grid
4. Editable Grid View

這四種的 設定裡面,在 Setting 裡面,底下有個 Layout And Behavior
裡面,如果是第二個 Multiple Record 會有一個

Mark checkbox   Mark all the checkbox fields of the record.

這是用在,例如 ScriptCase 所附的 Security 模組中的 Groups/Apps 權限程式中,設定是否有權限,就有用到這個功能。
如果要在這一個 row 的前面多出現一個  Checkbox 以選擇這個 row 裡面所有的 checkbox on/off 就必須把以上這個選項打開。

其他三個form 類型沒有這個選項。

這是在 Script Case 的 HELP 裡面沒有寫到的!


2015年4月4日 星期六

ScriptCase 的內建Macro : sc_field_disabled_record()

很多軟體都會有一些未公布、未公開的......

ScriptCase 也是一樣的,真的是有點令人......討厭。

我覺得 ScriptCase 還有很多改進的空間,或者是像我另一位朋友說的:「他完全不考慮使用這種程式產生器、或是現成模組、套版等」,開發程式產生器、或套組的工程師,我們搞不清楚他的裡面寫什麼,Open Source的還好,可以看到原始程式碼,還可以知道他做了甚麼事,沒有開放原始碼的,就完全不知道它內部的做法,好像黑盒子一樣。

程式軟體工程的模組,黑盒子概念,物件概念,當然是為了不用蓋房子都必須從磚塊一個一個砌,可以用別人做好的模組來使用就好,節省時間與成本,然而,有一好,就沒兩好,模組也就成了黑盒子,他裡面搞什麼,我們無法掌控!

ScriptCase的Macro有許多讓人......的地方,再怎樣多的 Macro 恐怕也很難滿足所有的需求。

sc_field_disabled(),是一個鎖住欄位,不讓人編輯的函數,但是,如果到了Grid的時候,就不適用逐個記錄的欄位鎖住否。必需用另一個函數sc_field_disabled_record(),而這個函數在 Help 裡面沒有!但在, ScriptCase所附的 Security 模組裡面就有用到!

令人感到困惑的是:到底還有多少沒有被列出公告出來的函數?

碰到問題時,去哪裡找?

ScriptCase 要加強這部分的說明文件,以及服務管道。

ScriptCase 好像是巴西人開發的,使用的原始文字我看不懂,還好有英文,但英文對他們來說是第二語言,所以,並不是第一手的資訊。

有沒有我們中文自己開發類似的程式產生器呢?


2015年4月3日 星期五

Script Case使用有感

Script Case 是一個 php 的 應用程式產生器,可以產生 php+mysql 或其他資料庫的應用程式。

他有設計好許多現成的功能,優勢是:可以快速的產生程式,然而,缺點是:僅能做出他所提供的功能。

所以,如果要以 Script Case來做為一個AP 的開發工具,記得:僅能做出它能做的,不能做出它做不到的。

最好,先研究他能做的,然後,去適應它能做的。
不要妄想去做他做不到的。那會浪費很多時間。

尤其是它有很多的 bugs ,我們只能去適應它!使用它的功能,不要妄想去改變它。


多想一想如何運用它擁有的功能,來達到程式的目的。畫面部分,就遷就他可以做的。



如何判斷現在FORM是在 insert mode? 還是 update mode?

只要用  if (empty({primary_key})) 就可以知道是否為新增模式了。 如果 {promary_key} 是空白的,那麼就是在新增模式;反之,就是更新模式。 以上。