2012年12月26日 星期三

ASP.NET Forms Authentication Role-based Security

參考網址 http://www.codeproject.com/Articles/2905/Role-based-Security-with-Forms-Authentication


標準的asp.net 和 MVC都適用

驗證密碼後所要作的事,把資料寫入 cookie中

 FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
1, // Ticket version
Username.Value, // Username associated with ticket
DateTime.Now, // Date/time issued
DateTime.Now.AddMinutes(30), // Date/time to expire
true, // "true" for a persistent user cookie
reader.GetString(0), // User-data, in this case the roles
FormsAuthentication.FormsCookiePath);// Path cookie valid for

// Encrypt the cookie using the machine key for secure transport
string hash = FormsAuthentication.Encrypt(ticket);
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, hash); 
     // Set the cookie's expiration time to the tickets expiration time
if (ticket.IsPersistent) cookie.Expires = ticket.Expiration;

// Add the cookie to the list for outgoing response
Response.Cookies.Add(cookie);


最重要的是要在 Global.asax 加上這些程式碼

protected void Application_AuthenticateRequest(Object sender,
EventArgs e)
{
if (HttpContext.Current.User != null)
{
if (HttpContext.Current.User.Identity.IsAuthenticated)
{
if (HttpContext.Current.User.Identity is FormsIdentity)
{
FormsIdentity id =
(FormsIdentity)HttpContext.Current.User.Identity;
FormsAuthenticationTicket ticket = id.Ticket;

// Get our roles from user Data
string userData = ticket.UserData;
string[] roles = userData.Split(',');
HttpContext.Current.User = new GenericPrincipal(id, roles);
}
}
}
}

2012年12月24日 星期一

.Net 的基本技巧


建構子constructor 的相互呼叫 
建構子後面會加上 :this 的方式來呼叫另一個建構子,如下一個沒有參數的建構子會帶一個參數給另一個有帶參數的建構子
public Constructor1(): this(string1)
  {
  }
 
  public Constructor1(String string1)
  {
      ....          
  }




Constraints on Type Parameters

在新增 generic class 時可以限制其類別為何, 如下

public class Repository1 where TEntity : class


http://msdn.microsoft.com/en-us/library/d5x73970.aspx




Dynamic Entity Framework Queries with Predicate Builder


http://www.jaltiere.com/index.php/2012/02/15/dynamic-entity-framework-queries-with-predicate-builder/




Dynamically Composing Expression Predicates - Using PredicateBuilder

http://www.albahari.com/nutshell/predicatebuilder.aspx

2012年12月20日 星期四

javascript window.print 列印時不顯示列印按鈕


列印時不顯示列印按鈕等元件的話,可以試試下列的程式碼


// var v = document.getElementsByName('button1');
// v[0].style.display='none';
  document.getElementById('button1').style.display='none';
window.print();
var v = document.getElementsByName('button1');
v[0].style.display='inline'

2012年12月16日 星期日

SQL 供應商銀行帳號資料


要看這個銀行帳號沒有被任何 supplier使用的話,可以用 Bank Account ID來查詢
iby.iby_pmt_instr_uses_all,看看有沒有資料存在

SELECT SUPP.VENDOR_NAME,
       supp.segment1 verndor_number,
       ssite.vendor_site_code,
       bank.bank_number,
       bank.bank_name,
       branch.branch_number,
       branch.bank_branch_name,
       acct.foreign_payment_use_flag,
       acct.bank_account_num,
       acct.bank_account_name,
       ssite.org_id,
   
       uses.last_update_date
       ,fu.user_name  created_by
  FROM iby.iby_ext_bank_accounts   acct,
       apps.iby_ext_bank_branches_v branch,
       apps.iby_ext_banks_v         bank,
       iby.iby_pmt_instr_uses_all  uses,
       iby.iby_external_payees_all payee,
       ap.ap_suppliers            supp,
       ap.ap_supplier_sites_all   ssite
       ,APPLSYS.fnd_user                fu
 WHERE acct.branch_id = branch.branch_party_id(+)
   AND acct.bank_id = bank.bank_party_id(+)
   AND acct.ext_bank_account_id = uses.instrument_id
   AND uses.instrument_type = 'BANKACCOUNT'
   AND uses.ext_pmt_party_id = payee.ext_payee_id
   AND payee.supplier_site_id = ssite.vendor_site_id
   AND ssite.vendor_id = supp.vendor_id
     AND uses.created_by = fu.user_id


或者


SELECT SUPP.VENDOR_NAME,
       supp.segment1 verndor_number,
       ssite.vendor_site_code,
       bank.bank_number,
       bank.bank_name,
       branch.branch_number,
       branch.bank_branch_name,
       acct.foreign_payment_use_flag,
       acct.bank_account_num,
       acct.bank_account_name,
       ssite.org_id,
 
       uses.last_update_date
       ,fu.user_name  created_by
  FROM iby.iby_ext_bank_accounts   acct,
       apps.iby_ext_bank_branches_v branch,
       apps.iby_ext_banks_v         bank,
       iby.iby_pmt_instr_uses_all  uses,
       iby.iby_external_payees_all payee,
       ap.ap_suppliers            supp,
       ap.ap_supplier_sites_all   ssite
       ,APPLSYS.fnd_user                fu
 WHERE acct.branch_id = branch.branch_party_id(+)
   AND acct.bank_id = bank.bank_party_id(+)
   AND acct.ext_bank_account_id = uses.instrument_id
   AND uses.instrument_type = 'BANKACCOUNT'
   AND uses.ext_pmt_party_id = payee.ext_payee_id
   AND payee.supplier_site_id = ssite.vendor_site_id(+)
   AND supp.party_id = payee.payee_party_id
   AND uses.created_by = fu.user_id

2012年12月14日 星期五

Oracle EBS R12 產生費用性暫估會科不正確

一般 Expense AP Accrual Account會在 Purchasing Option內有一個欄位可以設定,但最近有發現到有一些部門的費用性暫估的會科不正確,部門 segment會出現該部門的代碼,正常應該是一個固定的代碼。  後來去查 Code Combination的設定,發現出現了一個組合是有包含部門的。 所以就試著把這個組合失效後,費用會科帶出來就正確了。

Fully Applied prepayment but status showed Available

目前有碰到過一張 prepayment 已經 fully applied了,但 status還顯示 Available,有作一些 data fix,但還是沒用,最後 oralce consultant建議 update ap_invoice_distributions_all將欄位 PREPAY_AMOUNT_REMAINING的值改為 0 就可以了。