Tahapan Hubungan

August 20, 2010

Tahap-Tahap Dalam Hubungan

Twit dr Mbak AlissaWahid tentang tahap perkembangan hubungan. Twit dari beliau telah dilakukan penyesuaian seperlunya.

OK, mari kita belajar ttg perkembangan hubungan antara sepasang manusia yang merupakan hasil penelitian Andrew G. Marshall. Kata Titiek Puspa: jatuh cinta berjuta rasanya. Dunia milik berdua. Menjalani nasib seperti Romeo & Juliet pun kita yakini, tapi awas, rasa jatuh cinta yg melayang-layang itu ternyata cuma bertahan 18-36 bulan. Bahkan belum bisa dibilang loving relationship.

Lirikan mata yg bikin perut mulas, debar hati saat ketemu, masih bisa menghilang ditelan hari, tak berkembang jadi hubungan yang kuat. Saat jatuh cinta, ternyata frekuensi otak melakukan ‘sinkronisasi’ sehingga tiba2 menemukan banyak kesamaan. Misal: “tnyata kita sama2 suka GnR lho”. Saat jatuh cinta, perbedaan-perbedaan yang ada terabaikan karena sinkronisasi itu, makanya berasa ketemu soulmate, pasangan jiwa.. cocook bgt!

Saat jatuh cinta, kelemahan-kelemahan pasangan nggak bermakna. Misal: suka mukul? “cinta kami pasti akan membuatnya berubah..” Apalagi abis berantem. kl fase jatuh cinta, saat baikan ini saat makin dalem jatuhnya cinta.. dunia suejuuk! Nah, pasangan yang bilang “kok sudah tak ada lagi cinta di antara kami?” biasanya yang dimaksud ya rasa jatuh cinta itu.

Nah, setelah melewati fase jatuh cinta, baru masuk hubungan yang sesungguhnya. Ada 6 tahap yang biasanya dilalui pasangan, dengan tantangan yang berbeda-beda. 6 tahap hubungan : blending, nesting, self-affirming, collaborating, adapting, renewing.

Blending biasanya masa hubungan tahun pertama (di tengah fase jatuh cinta, fase blending sudah mulai muncul) sampai akhir tahun kedua hubungan.

Nesting terjadi dalam masa hubungan sampai akhir tahun ketiga. Di sini mulai muncul berantem beneran.

Self-affirming itu tahap hubungan di tahun keempat sampai kelima dimana kebutuhan individu mulai muncul lagi. Mulai ada kompromi.

Collaborating itu tahap hubungan mulai th ke5 sampai 15. Sudah mulai mapan, tapi kadang juga bosan. Besar kemungkinan “jalan sendiri2″.

Adapting ini masa hubungan yang paling rapuh. Penuh dengan tantangan di luar hubungan itu sendiri. Misalnya menghadapi anak remaja. Fase ini terjadi di tahun ke 15-25.

Tahap hubungan terakhir yaitu renewing. Ini yg kita lihat dr orangtua kita yg sudah melewati masa 25 tahun pernikahan: penerimaan total.

12-18bulan sejak saat jatuh cinta, chemistry sang dua sejoli mulai menurun. Perbedaan mulai terasa, menimbulkan kejutan-kejutan. Blending dlm hubungan adalah saat dimana 2 individu mulai menyatukan perbedaan2. Yg suka lagu metal mulai terbiasa dengan lagu2 opera. Kunci di tahun 2-3 dlm tahap nesting adalah mendengarkan, krn akan membantu kita memahami pasangan seutuhnya. Hubungan yang sehat memberi ruang yang seimbang untuk kedua dorongan diri tersebut. Kita belajar mengikhlaskan sebagian untuk mendapatkan keduanya.

Tahun ke2-3 hubungan adalah fase nesting (bersarang). Komitmen makin jelas. Di sini loving attachments mulai terbentuk. Dalam hubungan fase nesting, banyak hal yang sebelumnya ditahan mulai bermunculan. Tadinya cuek pasangan suka telat, sekarang mulai sebel. Di fase nesting, mata yang tadinya hanya tertuju untuk pasangan, sudah mulai bisa menyadari ada orangtua, keluarga, teman dll. Makanya dalam hubungan fase nesting, banyak pasangan mulai sering berantem. Jadi hal terpenting adalah mencari cara tepat untukmengatasi perbedaan.

Next stage: Self-Affirming. Ini saat pasangan mulai kembali ke kebutuhan personal, bukan lagi mendahulukan hubungan dengan pasangan. Tadinya berdua lebih baik, sekarang pengen yang sendiri-sendiri dong. Lebih bebas, nggak perlu jaga perasaan pasangan. Fase Self-Affirming ini di usia hubungan 3-4 tahun. Kadang bikin shock, apalagi kalo di fase-fase sebelumnya semua dilakukan barengan. Fase self-affirming ini saat kita mulai punya kompromi-kompromi utk menjaga keseimbangan individual dengan kebutuhan hubungan. Yang berat di fase Self-Affirming kalo ada 1 pihak yang dependen. Merasa ‘ditinggalkan’ saat pasangan mulai sibuk dengan diri sendiri. Padahal justru independensi di fase SelfAffirming itu jadi fondasi yang kuat utk interdependensi jangka panjang.

Fase Collaborating: usia hubungan 5-15 tahun. Rasa aman sudah ada, masuk bentuk kerjasama karena saling tergantung. Mapan deh. Tantangan: hubungan yang terlalu mapan kadang menimbulkan kebosanan. Nggak ada greng. Kalo komunikasi jelek, sibuk sendiri-sendiri. Fase Collaborating adalah fase terberat dalam perkembangan hubungan perkawinan. Di Inggris, sebagian besar perceraian terjadi di fase ini. Di fase Collaborating ini, yang paling menentukan adalah saling dukung yg besar, bukan saling tuntut. Bisa runyam.

Hubungan terus berkembang masuk ke fase Adapting, tahun 15-25an. Adaptasi bukan dalam hal hubungan, tapi ke hal-hal lain. Anak remaja, karir stuck, dll. Di fase adapting ini, pasangan juga sudah realistis terhadap kebiasaan/kepribadian pasangannya. “Abis gmn, dia emang judes..”. Jadi di tahap hubungan yang ini, yang berat adalah melawan pikiran jahat “dia sih nggak mungkin mau berubah demi saya/anak2..”. Skill yang diperlukan untuk survive di fase Adapting adalah mendengarkan, supaya betul-betul paham harapan pasangan.

Fase terakhir adalah Renewing, setelah usia hubungan melampaui 25 tahun. Jika mampu melewati tahap-tahap sebelumnya dengan baik, ini masa keemasan: damai, penuh cinta. Tantangannya hanya saat2 puber kedua atau menopause yg memang memunculkan hal2 khusus. Tp umumnya hubungan sgt oke. Bila sudah sampai tahap renewing ini, keluarga menjadikan pasangan ini sbg sumber inspirasi & pusat kekuatan

Semoga kita semua bs melampaui keenam tahap hubungan dg baik smp jd kakek nenek & jd teladan anak cucu. Amiin..

Advertisements

Runtime form controls

August 20, 2008

Creating runtime form controls can be useful in a variety of circumstances. Any type of control can be added at runtime: groups, string edits, buttons etc.

Standard Axapta uses this technique to dynamically add ‘Action’
buttons to forms when required. The code to add controls for these
functions is called from the new() method of SysSetupFormRun.

Introduction

The basic process to add controls and intercept their events at runtime is as follows:

  • use form.addControl(ControlType, ControlName) to add the control
  • call form.controlMethodOverload(true) to enable over-riding of the control events
  • write appropriate event handler methods on the form

If you are dealing only with buttons, then it is possible to set
the MenuItemType and MenuItemName on the button when it is created. In
this way, you can directly call a report, class or another form, and
you don’t need to write additional code on the form to deal with the
button click.

The Basics

The simplest example uses the init() method of a form to add the
controls, and design-time methods to intercept the control events. Take
note of the control names used during the .addControl() call. In the
example below, the control names are ‘DynamicStringControl’ and
‘DynamicButtonControl’.

/* GeSHi (c) Nigel McNie 2004 (http://qbnz.com/highlighter) */
.code .imp {font-weight: bold; color: red;}
.code .kw1 {color: #0000ff;}
.code .co1 {color: #007F00;}
.code .coMULTI {color: #007F00;}
.code .es0 {color: #666666; font-weight: bold;}
.code .br1 {color: #0000ff;}
.code .br2 {color: #0000ff;}
.code .st0 {color: #FF0000;}
.code .nu0 {color: #000000;}
.code .me1 {color: #000000;}
.code .me2 {color: #000000;}

public void init()
{
FormStringControl formStringControl;
FormButtonControl formButtonControl;
FormGroupControl formGroupControl;
;

// Adding a group
formGroupControl = this.form().addControl(FormControlType::Group, "MyGroup");
formGroupControl.caption("It's my group!");

// Adding a string to a group
formStringControl = formGroupControl.addControl(FormControlType::String, "DynamicStringControl");
formStringControl.label("Dynamic string control");

// Adding another string to the group using the same name. This will use the same event method as the
// first "DynamicStringControl"
formStringControl = formGroupControl.addControl(FormControlType::String, "DynamicStringControl");
formStringControl.label("Dynamic string control2");

formButtonControl = this.form().addControl(FormControlType::Button, "DynamicButtonControl");
formButtonControl.text("Dynamic button");

this.controlMethodOverload(true);

super();
}

You can then write event handler methods for the controls at the top (element) level of your form.

/* GeSHi (c) Nigel McNie 2004 (http://qbnz.com/highlighter) */
.code .imp {font-weight: bold; color: red;}
.code .kw1 {color: #0000ff;}
.code .co1 {color: #007F00;}
.code .coMULTI {color: #007F00;}
.code .es0 {color: #666666; font-weight: bold;}
.code .br1 {color: #0000ff;}
.code .br2 {color: #0000ff;}
.code .st0 {color: #FF0000;}
.code .nu0 {color: #000000;}
.code .me1 {color: #000000;}
.code .me2 {color: #000000;}

void dynamicButtonControl_Clicked()
{
;

info ("Dynamic button clicked!");
}

boolean dynamicStringControl_Modified()
{
FormStringControl control = element.controlCallingMethod();
;

info (strFmt("Modified dynamic control %1 to %2", int2str(control.id()), control.text()));
return true;
}

Note that the first part of the handler method names (before the underscore) exactly matches the control names used in init().

[edit] Adding menu-item buttons

It is usually preferable to keep the amount of code on a form to a
minimum. By setting your dynamically-created buttons to call
menu-items, you can avoid writing the event handlers completely.

The following example adds a menu-item button to a form, which
will open the SalesTable form using the standard Axapta menu-item. Note
that we now must use a FormFunctionButtonControl, rather than a
FormButtonControl.

The button will correctly show the label from the menu-item.

/* GeSHi (c) Nigel McNie 2004 (http://qbnz.com/highlighter) */
.code .imp {font-weight: bold; color: red;}
.code .kw1 {color: #0000ff;}
.code .co1 {color: #007F00;}
.code .coMULTI {color: #007F00;}
.code .es0 {color: #666666; font-weight: bold;}
.code .br1 {color: #0000ff;}
.code .br2 {color: #0000ff;}
.code .st0 {color: #FF0000;}
.code .nu0 {color: #000000;}
.code .me1 {color: #000000;}
.code .me2 {color: #000000;}

public void init()
{
FormFunctionButtonControl formFunctionButtonControl;
;

formFunctionButtonControl = this.form().addControl(FormControlType::MenuFunctionButton, "SalesTableButton");
formFunctionButtonControl.menuItemType(MenuItemType::Display);
formFunctionButtonControl.menuItemName(MenuItemDisplayStr(SalesTable));

super();
}

The same principle can be used to call your own ‘display’, ‘output’
or ‘action’ menu-item. This is useful if the button should perform some
intensive database processing, which would benefit from being
encapsulated in a server-side class.

See the create() method on the KMActionMenuButtonAuto class for a further, more complex example.

See this project for two forms demonstrating the above concepts.

[edit] Adding grid control

In most cases you’d better use visible property of this control’s
type. But sometimes you have to add a grid on an existing form and
without any opportunity of change. This example will help you. Rather
you are making this modification on forms, that are managed from class.
In our tutorial case this is runable tutorial_AddRunTimeControls class.
This following code adds a grid control of the selected table. You may
find similar functionality in the form SysTableBrowser:

/* GeSHi (c) Nigel McNie 2004 (http://qbnz.com/highlighter) */
.code .imp {font-weight: bold; color: red;}
.code .kw1 {color: #0000ff;}
.code .co1 {color: #007F00;}
.code .coMULTI {color: #007F00;}
.code .es0 {color: #666666; font-weight: bold;}
.code .br1 {color: #0000ff;}
.code .br2 {color: #0000ff;}
.code .st0 {color: #FF0000;}
.code .nu0 {color: #000000;}
.code .me1 {color: #000000;}
.code .me2 {color: #000000;}

void addRunTimeControls(FormRun _formRun)
{
FormGridControl formGrigControl;
Form _form;
FormBuildDataSource formBuildDataSource;
FormBuildDesign formBuildDesign;
FormBuildStringControl formBuildStringControl;
FormBuildGridControl formBuildGridControl;
Object formBuildControl;
FormBuildGroupControl formGroupControl;
CustTable custTable;
DictTable dictTable;
TableId tableID;
;

// Adding a Grid control, this used in SysTableBrowser
tableID = picktable();
dictTable = new DictTable(tableID);
_form = _formRun.form();
formBuildDataSource = _form.dataSource(2);
formBuildDataSource.name(dictTable.name());
formBuildDataSource.table(dictTable.id());
formBuildDataSource.autoQuery(true);
formBuildDesign = _form.design();
formBuildDesign.widthMode(-1);
formBuildDesign.widthValue(600);
formBuildDesign.heightMode(-1);
formBuildDesign.heightValue(400);

formGroupControl = formBuildDesign.addControl(FormControlType::Group, 'SecondGrid');
formGroupControl.caption("Dynamic Grid");
formGroupControl.widthMode(1);
formGroupControl.heightMode(1);
formBuildGridControl = formGroupControl.addControl(FormControlType::GRID,'Grid');
formBuildGridControl.dataSource(dictTable.name());
formBuildGridControl.name('AddRunTime');

formBuildGridControl.widthMode(1);
formBuildGridControl.heightMode(1);
this.showFields(tableNum(custTable), formBuildGridControl, formBuildDataSource);

_formRun.controlMethodOverload(true);
_formRun.init();
_formRun.run();
_formRun.detach();
}

And define the fields on grid.

/* GeSHi (c) Nigel McNie 2004 (http://qbnz.com/highlighter) */
.code .imp {font-weight: bold; color: red;}
.code .kw1 {color: #0000ff;}
.code .co1 {color: #007F00;}
.code .coMULTI {color: #007F00;}
.code .es0 {color: #666666; font-weight: bold;}
.code .br1 {color: #0000ff;}
.code .br2 {color: #0000ff;}
.code .st0 {color: #FF0000;}
.code .nu0 {color: #000000;}
.code .me1 {color: #000000;}
.code .me2 {color: #000000;}

public void showFields(tableId                 tableId,
FormBuildGridControl formBuildGridControl,
FormBuildDataSource formBuildDataSource)


{
FormBuildStringControl formBuildStringControl;
DictTable dictTable;
fieldId fieldId;
int i;
int fieldCnt;
;
dictTable = new DictTable(tableId);
for (i=1; i<=3; i++)
{
fieldId = dictTable.fieldCnt2Id(i);
formBuildGridControl.addDataField(formBuildDataSource.id(), fieldId2Ext(fieldId, 1));
}
}

See this project for this example.

[edit] Removing the control

To remove a control again, use the following code:

/* GeSHi (c) Nigel McNie 2004 (http://qbnz.com/highlighter) */
.code .imp {font-weight: bold; color: red;}
.code .kw1 {color: #0000ff;}
.code .co1 {color: #007F00;}
.code .coMULTI {color: #007F00;}
.code .es0 {color: #666666; font-weight: bold;}
.code .br1 {color: #0000ff;}
.code .br2 {color: #0000ff;}
.code .st0 {color: #FF0000;}
.code .nu0 {color: #000000;}
.code .me1 {color: #000000;}
.code .me2 {color: #000000;}

element.design().removeControl(elementId)

This also can be usefull to see how a dialog field properties can be changed on the fly
PriceListCopy


Color-code your Dynamics environments

August 15, 2008

Since implementing Axapta / Dynamics AX in 2003, we’ve found it invaluable to provide an environment for testing and training as well as our live system (or production environment) to end users. This lets people try different processes or train new employees without fear of screwing up the “real” data.

Occasionally, though, we’ve run into a problem where someone thought they were using the live system, but were actually in the test environment. It’s an easy mistake to make. There is no obvious visual cue to alert a user that they are working on a test system.

There is a way change the color of the Dynamics forms to help indicate what environment is in use. It involved overriding the SysSetupFormRun.run() method, which will be called every time a form is opened. On the class SysSetupFormRun, create a new method with this code:

public void run()
{
SysSQLSystemInfo systemInfo = SysSQLSystemInfo::construct();
;

super();

// Set the color scheme of this instance of the SysFormRun to RGB
this.design().colorScheme(FormColorScheme::RGB);

// If the database name is not the live version, change the color of the form

if (systemInfo.getloginDatabase() != ‘MyDBName’)
this.design().backgroundColor(0x112255);
}

That’s all there is to it. If your live and test systems use the same database name, but the AOS is running on different servers you can modify this code to to match on systemInfo.getLoginServer() != ‘MyServerName’. You can change the color by setting the hex value. It uses the RGB values in reverse order: 0xBBGGRR.

Variations of this code could switch form colors to indicate the current user account, application layer, or company. Less practical uses could match color to the time of day or season of the year. If you find this code useful, leave me a message noting what you did with it.