方法1 :
在/etc/rc.local文件中添加
方法 2:
在检索中找到 startup application 打开界面添加命令即可

2014-06-02 Created By
BaoXinjian

2014-09-14 Created By
BaoXinjian

动态向类中参与属性

澳门金沙国际 1一、摘要

澳门金沙国际 2一、汇总

(未已毕的办法并没有在类的MethodList)
在分拣中只可以添加方法,无法添加属性,在分拣中申明了1脾品质,既不自动生成setter和getter方法,也从未成员变量_ivar的转移;所以使用运营时动态添加属性,实际上就是添加了setter和getter方法,但是并没有增进_ivar成员变量
当大家在分拣中添加了2个属性



@property (nonatomic, strong) NSString *speed;

贯彻OAF修改功用Update

    1.建立SearchInvoicePG对应的Create按钮以跳转到Create页面

当目的调用该属性的时候固然调用起setter方法和getter方法,
大家在setter方法中

 

    2. SearchInvoiceCO.java中添加如下方法

- (void)setSpeed:(NSString *)speed {
    objc_setAssociatedObject(self, @selector(speed), speed, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}

澳门金沙国际 3二、案例

    3. 建立CreateInvoicePG,设定Button
Region和Main Region

getter方法


    4. CreateInvoiceCO.java中添加如下方法

- (NSString *)speed {
   return  objc_getAssociatedObject(self, @selector(speed));
}

须要:落成修改成效

增产的兑现,动态添加属性。    5. 在InvoiceAM中添加如下方法

那般,就形成了在分拣里面动态的添加属性的机能;

  1. 建立Update按钮的接连

    6. CreateInvoiceCO.java中添加如下方法


2. 设定触发事件为FireAction

    7. 在InvoiceAM中添加如下方法


3.
在SearchInvoiceCO.java中添加如下方法

    8. SearchInvoiceCO.java中添加如下方法

既然是运作时添加方法,那是或不是可以不在Person分类中加上(破坏了封装性),

4. 建立UpdateInvoicePG

 

//创建一个字典,将属性作为key, 属性值作为value存储在之中
static const NSMutableDictionary *_propDicts;

static const void *  propDict(NSString *propName) {
    if(!_propDicts) _propDicts = [NSMutableDictionary dictionary];

    id value = _propDicts[propName];
    if (!value) {
        value = [NSNull null];//当没有该key时,添加进字典
        [_propDicts setValue:value forKey:propName];
    }
    return (__bridge const void *)(value);
}
//setter方法的IMP
static void setPropIMP (id slf, SEL selector, id value ,NSString *propName) {
    objc_setAssociatedObject(slf, propDict(propName), value, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
//getter方法的IMP
static id getPropIMP(id slf, SEL selector, NSString *propName) {
    return objc_getAssociatedObject(slf, propDict(propName));
}

5. 在UpdateInvoiceCO.java中添加如下方法

澳门金沙国际 4二、分步解析

在viewdidiload方法里为person的属性添加setter方法和getter方法,

6. 在InvoiceAM中添加如下方法


 Class cls = NSClassFromString(@"Person");
    //添加setter方法,方法指针指向(IMP)setPropIMP,返回值为void,传有2个隐藏参数@:self, : _cmd 代表该方法, 传入2个参数:@@ key:value
    class_addMethod(cls, @selector(setProp: forKey:), (IMP)setPropIMP, "v@:@@");
    class_addMethod(cls, @selector(getProp:), (IMP)getPropIMP, "@@:@");

    Person *p = [Person new];
    [p performSelector: @selector(setProp: forKey:) withObject:@"kcs" withObject:@"name"];
    id name = [p performSelector: @selector(getProp:) withObject:@"name"];
    NSLog(@"%@", name);

7. 在InvocieUpdateVO中添加如下方法

1.赤手空拳SearchInvoicePG对应的Create按钮以跳转到Create页面

8. 在UpdateInvoiceCO.java中添加如下方法

    澳门金沙国际 5

9. 在InvoiceAM中添加如下方法

 

 

2. 澳门金沙国际 6SearchInvoiceCO.java中添加如下方法

澳门金沙国际 7三、案例已毕

public void processFormRequest(OAPageContext pageContext,OAWebBean webBean) { 

    super.processFormRequest(pageContext, webBean);

    /**按下创建发票Button,页面跳转至创建发票页面**/

    if (pageContext.getParameter("Create") != null) {

        pageContext.setForwardURL("OA.jsp?page=/oracle/apps/bxj/ap/invoice/webui/CreateInvoicePG",

                                  null,

                                  OAWebBeanConstants.KEEP_MENU_CONTEXT,

                                  null, null, true,

                                  OAWebBeanConstants.ADD_BREAD_CRUMB_YES,

                                  OAWebBeanConstants.IGNORE_MESSAGES);

    }

}

 

  1. 建立Update的连接

 

    澳门金沙国际 8

3. 建立CreateInvoicePG,设定Button
Region和Main Region

 

澳门金沙国际 9    

2. 设定触发事件为FireAction

 

    澳门金沙国际 10

4. CreateInvoiceCO.java中添加如下方法

 

public void processRequest(OAPageContext pageContext, OAWebBean webBean) {

    super.processRequest(pageContext, webBean);

    /**初始化页面,调用创建Row的方式**/

    if (!pageContext.isBackNavigationFired(false)) {

        TransactionUnitHelper.startTransactionUnit(pageContext, "CreateInvoiceTxn");

        if (!pageContext.isFormSubmission()) {

            OAApplicationModule am = pageContext.getApplicationModule(webBean);

            am.invokeMethod("AmCreateInvoice");

        }

    } else {

        if (!TransactionUnitHelper.isTransactionUnitInProgress(pageContext,"CreateInvoiceTxn",true)) {

            OADialogPage dialogPage = new OADialogPage(NAVIGATION_ERROR);

            pageContext.redirectToDialogPage(dialogPage);

        }

    }

    OAApplicationModule am = pageContext.getApplicationModule(webBean);

    am.invokeMethod("AmCreateInvoice", null);

}

3.
在SearchInvoiceCO.java中添加如下方法

 
 

 1 public void processFormRequest(OAPageContext pageContext,OAWebBean webBean) {
 2 
 3     super.processFormRequest(pageContext, webBean);
 4 
 5     /**按下更改发票Button,触发AM中的AmUpdateInvocie方法**/
 6 
 7     if ("update".equals(pageContext.getParameter(EVENT_PARAM))) {
 8 
 9         OAApplicationModule am = pageContext.getApplicationModule(webBean);
10 
11         pageContext.setForwardURL("OA.jsp?page=/oracle/apps/bxj/ap/invoice/webui/UpdateInvoicePG",
12 
13                                    null,
14 
15                                    OAWebBeanConstants.KEEP_MENU_CONTEXT,
16 
17                                    null,
18 
19                                    null,
20 
21                                    true,
22 
23                                    OAWebBeanConstants.ADD_BREAD_CRUMB_NO,
24 
25                                    OAWebBeanConstants.IGNORE_MESSAGES);
26 
27     }
28 
29 }

5.
澳门金沙国际 11在InvoiceAM中添加如下方法

 

/**创建Invoice,初始化页面创建Row以存放资料**/

public void AmCreateInvoice() {

    OAViewObject vo = (OAViewObject)getInvoiceCreateVO1();

    vo.setMaxFetchSize(0);

    vo.executeQuery();

    Row row = vo.createRow();

    vo.insertRow(row);

    row.setNewRowState(Row.STATUS_INITIALIZED);

}

4. 建立UpdateInvoicePG

 

    澳门金沙国际 12

 

 

6. CreateInvoiceCO.java中添加如下方法

5. 在UpdateInvoiceCO.java中添加如下方法

public void processFormRequest(OAPageContext pageContext,OAWebBean webBean) {

    super.processFormRequest(pageContext, webBean);

    /**按下确定Button后,调用创建Invoice的AM 方法**/

    OAApplicationModule am = pageContext.getApplicationModule(webBean);

    if (pageContext.getParameter("Apply") != null) {

        OAViewObject vo = (OAViewObject)am.findViewObject("CreateInvoiceVO1");

        am.invokeMethod("AmCreateApply", null);

        TransactionUnitHelper.endTransactionUnit(pageContext,"CreateInvoiceTxn");

        pageContext.forwardImmediately("OA.jsp?page=/oracle/apps/bxj/ap/invoice/webui/SearchInvoicePG",

                                       null,

                                       OAWebBeanConstants.KEEP_MENU_CONTEXT,

                                       null, null, true,

                                       OAWebBeanConstants.ADD_BREAD_CRUMB_NO);

    } else if (pageContext.getParameter("Cancel") != null) {

        am.invokeMethod("AmCreateRollback", null);

        TransactionUnitHelper.endTransactionUnit(pageContext, "CreateInvoiceTxn");

        pageContext.forwardImmediately("OA.jsp?page=/oracle/apps/bxj/ap/invoice/webui/SearchInvoicePG",

                                       null,

                                       OAWebBeanConstants.KEEP_MENU_CONTEXT,

                                       null,null,true,

                                       OAWebBeanConstants.ADD_BREAD_CRUMB_NO);

    }
}
 1 public void processRequest(OAPageContext pageContext, OAWebBean webBean) {
 2 
 3     super.processRequest(pageContext, webBean);
 4 
 5     /**从SearchInvoice调转至UpdateInvoice,对修改发票页面初始化**/
 6 
 7     String InvoiceId = pageContext.getParameter("InvoiceId");
 8 
 9     if (!pageContext.isBackNavigationFired(false)) {
10 
11         TransactionUnitHelper.startTransactionUnit(pageContext,"UpdateInvoiceTxn");
12 
13         if (!pageContext.isFormSubmission()) {
14 
15             Serializable[] params = { InvoiceId };
16 
17             OAApplicationModule am = pageContext.getApplicationModule(webBean);
18 
19             am.invokeMethod("AmInitUpdateInvoice",params);
20 
21         }
22 
23     } else {
24 
25         if (!TransactionUnitHelper.isTransactionUnitInProgress(pageContext,"UpdateInvoiceTxn",true)) {
26 
27             OADialogPage dialogPage = new OADialogPage(NAVIGATION_ERROR);
28 
29             pageContext.redirectToDialogPage(dialogPage);
30 
31         }
32 
33     }
34 
35 }

 

 

澳门金沙国际 , 

6. 在InvoiceAM中添加如下方法

  1. 在InvoiceAM中添加如下方法

    /开创Invoice,将材质做Commit/

    public void AmCreateApply() {

     getTransaction().commit();
    

    }

 1 /**显示Invoice 明细页面**/
 2 
 3 public void AmShowInvoice(String InvoiceId){
 4 
 5     InvoiceDetailVOImpl vo = getInvoiceDetailVO1();
 6 
 7     if (vo == null) {
 8 
 9         MessageToken[] errtokens = {new MessageToken("OBJECT_NAME","InvoiceDetailVO1")};
10 
11         throw new OAException("AK","FWK_TBX_OBJECT_NOT_FOUND",errtokens);
12 
13     }
14 
15     vo.VoShowInvoice(InvoiceId);
16 
17 }

 

 

 

 

8.
SearchInvoiceCO.java中添加如下方法

7. 在InvocieUpdateVO中添加如下方法

public void processRequest(OAPageContext pageContext, OAWebBean webBean) {

    super.processRequest(pageContext, webBean);

    /**从创建Invoice页面跳转至查询Invoice页面时,检查Create Invoice资料是否被Commit**/

    OAApplicationModule am = pageContext.getApplicationModule(webBean);

    if (TransactionUnitHelper.isTransactionUnitInProgress(pageContext,"CreateInvoice",false)) {

        am.invokeMethod("AmCreateRollback");

        TransactionUnitHelper.endTransactionUnit(pageContext, "CreateInvoiceTxn");

    }

}
 1 /**从SearchInvoice页面跳转至UpdateInvoice页面,实现自动查询**/
 2 
 3 public void VoShowInvoice(String InvoiceId) {
 4 
 5     if ((InvoiceId != null) & (!("".equals(InvoiceId.trim())))) {
 6 
 7         Number Invoice_Id = null;
 8 
 9         try {
10 
11             Invoice_Id = new Number(InvoiceId);
12 
13         } catch (Exception e) {
14 
15             throw new OAException("CUX", "CUX_INVOICE_INVALID_NOTIFY_ID");
16 
17         }
18 
19         setWhereClause("INVOICE_ID = :1");
20 
21         setWhereClauseParams(null);
22 
23         setWhereClauseParam(0, Invoice_Id);
24 
25         executeQuery();
26 
27     }
28 
29 }

 

 

Thanks and Regards

8. 在UpdateInvoiceCO.java中添加如下方法

 澳门金沙国际 13

 1 public void processFormRequest(OAPageContext pageContext,OAWebBean webBean) {
 2 
 3     super.processFormRequest(pageContext, webBean);
 4 
 5     /**按下确定Button后,调用修改Invoice的AM 方法**/
 6 
 7     OAApplicationModule am = pageContext.getApplicationModule(webBean);
 8 
 9     if (pageContext.getParameter("Apply") != null) {
10 
11         OAViewObject vo = (OAViewObject)am.findViewObject("UpdateInvoiceVO1");
12 
13         am.invokeMethod("AmUpdateApply", null);
14 
15         TransactionUnitHelper.endTransactionUnit(pageContext,"UpdateInvoiceTxn");
16 
17         pageContext.forwardImmediately("OA.jsp?page=/oracle/apps/bxj/ap/invoice/webui/SearchInvoicePG",
18 
19                                         null,
20 
21                                         OAWebBeanConstants.KEEP_MENU_CONTEXT,
22 
23                                         null, null, true,
24 
25                                         OAWebBeanConstants.ADD_BREAD_CRUMB_NO);
26 
27     } else if (pageContext.getParameter("Cancel") != null) {
28 
29         am.invokeMethod("AmCreateRollback", null);
30 
31         TransactionUnitHelper.endTransactionUnit(pageContext, "CreateInvoiceTxn");
32 
33         pageContext.forwardImmediately("OA.jsp?page=/oracle/apps/bxj/ap/invoice/webui/SearchInvoicePG", null,
34 
35                                        OAWebBeanConstants.KEEP_MENU_CONTEXT,
36 
37                                        null,null,true,
38 
39                                        OAWebBeanConstants.ADD_BREAD_CRUMB_NO);
40 
41     }
42 
43 }

 

9. 在InvoiceAM中添加如下方法

1 /**修改Invoice,将资料做Commit**/
2 
3 public void AmUpdateApply() {
4 
5     getTransaction().commit();
6 
7 }

 

Thanks and Regards

参考:Oracle Developer Guide

参考:王重东 OAF开发笔记

澳门金沙国际 14

相关文章