I have a Docusign Send Now button with the following code:
{!REQUIRESCRIPT("/apex/dsfs__DocuSign_JavaScript")}
//********* Option Declarations (Do not modify )*********//
var RC = '';
var RSL='';
var RSRO='';
var RROS='';
var CCRM='';
var CCTM='';
var CCNM='';
var CRCL='';
var CRL='';
var OCO='';
var DST='';
var LA='';
var CEM='';
var CES='';
var STB='';
var SSB='';
var SES='';
var SEM='';
var SRS='';
var SCS='';
var RES='';
//*************************************************//
// Modify individual options here:
LA = '1';
DST = '';
RC = '';
RSL = '';
RSRO = '';
RROS = '0';
CCRM = 'Deal Signer~Signer;Invoice Contact~Carbon Copy';
CCTM = 'Signer1~Signer;Carbon Copy~CC';
CCNM = '';
CRCL = 'Deal_Contacts__r,Email~Email__c;LastName~Name;Role~Contact_Deal_Role__c;SignNow~Contact_Sign_Now__c;LoadDefaultContacts~0';
CRL = '';
CEM = ''; //TODO: Set this as a field on the document.
CES = ''; //TODO: Set this as a field on the document.
STB = '0';
SSB = '0';
SES = '0';
SEM = '0';
SRS = '0';
SCS = '0';
RES = '1,3,3,1,10,1';
OCO = 'Tag';
//********* Page Callout (Do not modify) *********//
window.location.href ="/apex/dsfs__DocuSign_CreateEnvelope?DSEID=0&SourceID={!Deal__c.Id}&RC="+RC+"&RSL="+RSL+"&RSRO="+RSRO+"&RROS="+RROS+"&CCRM="+CCRM+"&CCTM="+CCTM+"&CRCL="+CRCL+"&CRL="+CRL
+"&OCO="+OCO+"&DST="+DST+"&CCNM="+CCNM+"&LA="+LA+"&CEM="+CEM+"&CES="+CES+"&SRS="+SRS+"&STB="+STB+"&SSB="+SSB+"&SES="+SES+"&SEM="+SEM+"&SRS="+SRS+"&SCS="+SCS+"&RES="+RES;
//*******************************************//
However, when I click the button, the TO fields do not populate. I have setup a custome object on my Deal__c object and everything pulls correctly when I query. Anyone have a similar issue or example code? Thanks!
EDIT: I was able to achieve the desired result with this code:
{!REQUIRESCRIPT("/apex/dsfs__DocuSign_JavaScript")}
{!REQUIRESCRIPT("/soap/ajax/10.0/connection.js")}
{!REQUIRESCRIPT("/soap/ajax/10.0/apex.js")}
var RC = '';var RSL='';var RSRO='';var RROS='';var CCRM='';var CCTM='';var CCNM='';var CRCL=''; var CRL='';var OCO='';var DST='';var LA='';var CEM='';var CES='';var STB='';var SSB='';var SES='';var SEM='';var SRS='';var SCS='';var RES='';
var deal = "{!Deal__c.Id}";
var dealContacts = sforce.apex.execute("GetDealContacts","getDealContacts",{dealID: deal});
if(!dealContacts.length) {
alert("This Customer Account has no Deal Signers. Please add a Deal Signer to continue.");
return;
}
var contacts = [];
var number;
for ( var i = 0, l = dealContacts.length; i < l; i++ ) {
var role = "";
number = i + 1
if(dealContacts[i].Role__c === "Deal Signer"){
role = "Signer" + number.toString();
} else {
role = "Invoice Contact";
}
contacts.push("Email~" + dealContacts[i].Email__c + ";Role~" + role + ";LastName~" + dealContacts[i].Name + ";SignNow~0");
}
var contactString = contacts.join(",");
contactString += ", LoadDefaultContacts~0";
LA = '1';
RSL = number;
CRL = contactString;
CCTM = 'Invoice Contact~Carbon Copy';
STB = '0';
SSB = '0';
SES = '0';
SEM = '0';
SRS = '0';
SCS = '0';
RES = '1,3,3,1,10,1';
OCO = 'Send';
//********* Page Callout (Do not modify) *********//
window.location.href = "/apex/dsfs__DocuSign_CreateEnvelope?DSEID=0&SourceID={!Deal__c.Id}&RC="+RC+"&RSL="+RSL+"&RSRO="+RSRO+"&RROS="+RROS+"&CCRM="+CCRM+"&CCTM="+CCTM+"&CRCL="+CRCL+"&CRL="+CRL+"&OCO="+OCO+"&DST="+DST+"&CCNM="+CCNM+"&LA="+LA+"&CEM="+CEM+"&CES="+CES+"&SRS="+SRS+"&STB="+STB+"&SSB="+SSB+"&SES="+SES+"&SEM="+SEM+"&SRS="+SRS+"&SCS="+SCS+"&RES="+RES;
//*******************************************//
Answered above in EDIT. Please see the second code block.
Related
I've got a working script that grabs the last row of a Google sheet and pushes the info into Google contacts.
var ss = SpreadsheetApp.getActiveSheet(); //var emailRow = ss.getRange('F2:F').getValues();
var emailRowNum = ss.getLastRow(); //var emailRowNum = emailRow.filter(String).length + 1;
function email() {
var emailNew = ss.getRange(emailRowNum,6).getValue(); //var emailNew = ss.getRange("F"+emailRowNum).getValues();
return emailNew;}
function givenName() {
var fname = ss.getRange(emailRowNum,4).getValue();
return fname;}
function lastName() {
var lname = ss.getRange(emailRowNum,5).getValue();
return lname;}
function loc() {
var street = ss.getRange(emailRowNum,8).getValue();
var city = ss.getRange(emailRowNum,9).getValue();
return street + " " + city;}
function phone() {
var phone = ss.getRange(emailRowNum,7).getValue();
return phone;}
function notes() {
var date = ss.getRange(emailRowNum,1).getValue();
var work = ss.getRange(emailRowNum,2).getValue();
var photo = ss.getRange(emailRowNum,3).getValue();
var site = ss.getRange(emailRowNum,12).getValue();
var find = ss.getRange(emailRowNum,10).getValue();
var referrer = ss.getRange(emailRowNum,11).getValue();
return (date + "\n\n" + work + "\n\n" + photo + "\n\n" + site + "\n\n" + find + " " + referrer + "\n\n-- eom --\n\n");}
function create() {
var fname = givenName();
var lname = lastName();
var contact = ContactsApp.createContact(fname, lname, email());
var group = ContactsApp.getContactGroup('emf');
group.addContact(contact);
var contacts = ContactsApp.getContactsByName(fname + ' ' + lname);
var setaddress = contacts[0].addAddress(ContactsApp.Field.HOME_ADDRESS,loc());
var setphone = contacts[0].addPhone(ContactsApp.Field.MAIN_PHONE,phone());
for (var i in contacts) {
contacts[i].setNotes(notes());
}
}
I'd like to modify it so that instead of grabbing the last row, it checks a column for a (not) value. If value is not found, then update Google contacts with that row's information.
Currently, I'm getting a 'Range not found' error ...
function info(){
var ss = SpreadsheetApp.getActiveSheet();
var data = ss.getRange("N1:N").getValues();
for(var n=0;n<data.length;n++){
if(data[n-1] != 'done'){
var email = ss.getRange("F"+n).getValue(); // Range not found error
var fname = ss.getRange("D"+n).getValue();
var lname = ss.getRange("E"+n).getValue();
var city = ss.getRange("I"+n).getValue();
var street = ss.getRange("H"+n).getValue();
var phone = ss.getRange("G"+n).getValue();
var date = ss.getRange("A"+n).getValue();
var work = ss.getRange("B"+n).getValue();
var photo = ss.getRange("C"+n).getValue();
var site = ss.getRange("L"+n).getValue();
var find = ss.getRange("J"+n).getValue();
var referrer = ss.getRange("K"+n).getValue();
var contact = ContactsApp.createContact(fname, lname, email);
var group = ContactsApp.getContactGroup('emf');
group.addContact(contact);
var contacts = ContactsApp.getContactsByName(fname + ' ' + lname);
var setaddress = contacts[0].addAddress(ContactsApp.Field.HOME_ADDRESS,street + " " + city);
var setphone = contacts[0].addPhone(ContactsApp.Field.MAIN_PHONE,phone);
for (var i in contacts) {
contacts[i].setNotes(date + "\n\n" + work + "\n\n" + photo + "\n\n" + site + "\n\n" + find + " " + referrer + "\n\n-- eom --\n\n");}
}
}
}
1 is the first row using A1Notation with getRange(). The first iteration is trying to getValue() of F0. Changing the n to start at 1 and n <= data.length should get the ranges you are looking for.
...
for(var n=1;n<=data.length;n++){
if(data[n-1] == 'done'){
var email = ss.getRange("F"+n).getValue(); // Range not found error
...
edit: One thing to note the var data = ss.getRange("N1:N").getValues(); range is going to loop over all 1000 default rows. This may not be ideal if your data set is significantly smaller than 1000 rows.
I am creating a custom docusign button on our opportunities object in salesforce and after i crafted the code i am receiving an error message "Unexpected token ~". No clue what this means. I can only hope i have something slightly off on my code. Here is the code:
{!REQUIRESCRIPT("/apex/dsfs__DocuSign_JavaScript")}
//********* Option Declarations (Do not modify )*********//
var RC = '';var RSL='';var RSRO='';var RROS='';var CCRM='';var CCTM='';var
CCNM='';var CRCL=''; var CRL='';var OCO='';var DST='';var LA='';var CEM='';var
CES='';var STB='';var SSB='';var SES='';var SEM='';var SRS='';var SCS ='';var
RES='';
//*************************************************//
// Modify individual options here://
// Recipient Starting Routing Order (default 1)//
RSRO = '1';
// Recipient Routing Order Sequential (default not sequential)//
RROS = '1';
// Custom Recipient List//
CRL = 'Email~anthony.m#playmakercrm.com;FirstName~Anthony;LastName~Miranda;Role~Signer 1;RoutingOrder~1;SignNow~1',
Email~;FirstName~;LastName~;Role~Signer 2;RoutingOrder~2;SignNow~1,
Email~john.g#playmakercrm.com;FirstName~John;LastName~Griscavage;Role~Signer 3;RoutingOrder~3;SignNow~0,
Email~anthony.m#playmakercrm.com;FirstName~Anthony;LastName~Miranda;Role~Signer 4;RoutingOrder3~;SignNow~,
Email~adam.bishop#playmakercrm.com;FirstName~Adam;LastName~Bishop;Role~Signer 5;RoutingOrder~3;SignNow~0,
Email~accounting#playmakercrm.com;FirstName~Accounting;LastName~Department;Role~Signer 6;RoutingOrder~3;SignNow~0,
Email~{!Opportunity.OwnerEmail};FirstName~{!Opportunity.OwnerFirstName};LastName~{!Opportunity.OwnerLastName};Role~Signer 7;RoutingOrder~3;SignNow~0,
Email~laura.mcdavid#playmakercrm.com;FirstName~Laura;LastName~McDavid;Role~Signer 8;RoutingOrder~3;SignNow~0;
// One Click Option (default edit envelope screen)//
OCO = 'Tag';
// Load Attachments (default on)//
LA = '1';
// Show Tag Button (default in config)//
STB = '1';
// Show Send Button (default in config)//
SSB = '1';
// Show Email Subject (default in config)//
SES = '1';
// Show Email Message (default in config)//
SEM = '1';
// Show Reminder/Expire (default in config)//
SRS = '1';
//********* Page Callout (Do not modify) *********//
window.location.href =
"/apex/dsfs__DocuSign_CreateEnvelope?DSEID=0&SourceID={!Opportunity.Id}&RC="+RC+"&RSL="+RSL+"&RSRO="+RSRO+"&RROS="+RROS+"&CCRM="+CCRM+"&CCTM="+CCTM+"&CRCL="+CRC
L+"&CRL="+CRL+"&OCO="+OCO+"&DST="+DST+"&CCNM="+CCNM+"&LA="+LA+"&CEM="+CEM+"&CES=
"+CES+"&SRS="+SRS+"&STB="+STB+"&SSB="+SSB+"&SES="+SES+"&SEM="+SEM+"&SRS="+SRS+"&
SCS="+SCS+"&RES="+RES;
//*******************************************//
I appreciate any help someone can provide me here.
UPDATED CODE (Removed line breaks)
{!REQUIRESCRIPT("/apex/dsfs__DocuSign_JavaScript")}
//********* Option Declarations (Do not modify )*********//
var RC = '';var RSL='';var RSRO='';var RROS='';var CCRM='';var CCTM='';var
CCNM='';var CRCL=''; var CRL='';var OCO='';var DST='';var LA='';var CEM='';var
CES='';var STB='';var SSB='';var SES='';var SEM='';var SRS='';var SCS ='';var
RES='';
//*************************************************//
// Modify individual options here://
RSRO = '1';RROS = '1';CRL = 'Email~anthony.m#playmakercrm.com;FirstName~Anthony;LastName~Miranda;Role~Signer 1;RoutingOrder~1;SignNow~1',Email~;FirstName~;LastName~;Role~Signer 2;RoutingOrder~2;SignNow~1,Email~john.g#playmakercrm.com;FirstName~John;LastName~Griscavage;Role~Signer 3;RoutingOrder~3;SignNow~0,Email~anthony.m#playmakercrm.com;FirstName~Anthony;LastName~Miranda;Role~Signer 4;RoutingOrder3~;SignNow~,Email~adam.bishop#playmakercrm.com;FirstName~Adam;LastName~Bishop;Role~Signer 5;RoutingOrder~3;SignNow~0,Email~accounting#playmakercrm.com;FirstName~Accounting;LastName~Department;Role~Signer 6;RoutingOrder~3;SignNow~0,Email~{!Opportunity.OwnerEmail};FirstName~{!Opportunity.OwnerFirstName};LastName~{!Opportunity.OwnerLastName};Role~Signer 7;RoutingOrder~3;SignNow~0,
Email~laura.mcdavid#playmakercrm.com;FirstName~Laura;LastName~McDavid;Role~Signer 8;RoutingOrder~3;SignNow~0;OCO = 'Tag';LA = '1';STB = '1';SSB = '1';SES = '1';SEM = '1';SRS = '1';
//********* Page Callout (Do not modify) *********//
window.location.href =
"/apex/dsfs__DocuSign_CreateEnvelope?DSEID=0&SourceID={!Opportunity.Id}&RC="+RC+"&RSL="+RSL+"&RSRO="+RSRO+"&RROS="+RROS+"&CCRM="+CCRM+"&CCTM="+CCTM+"&CRCL="+CRC
L+"&CRL="+CRL+"&OCO="+OCO+"&DST="+DST+"&CCNM="+CCNM+"&LA="+LA+"&CEM="+CEM+"&CES=
"+CES+"&SRS="+SRS+"&STB="+STB+"&SSB="+SSB+"&SES="+SES+"&SEM="+SEM+"&SRS="+SRS+"&
SCS="+SCS+"&RES="+RES;
//*******************************************//
I have done just as Larry K suggested below and have updated the code. Now, the error message does not show up when i click the button. Nothing happens at all. It's almost like it is not firing.
{!REQUIRESCRIPT("/apex/dsfs__DocuSign_JavaScript")}
//********* Option Declarations (Do not modify )*********//var RC = '';var RSL='';var RSRO='';var RROS='';var CCRM='';var CCTM='';varCCNM='';var CRCL=''; var CRL='';var OCO='';var DST='';var LA='';var CEM='';varCES='';var STB='';varSSB='';var SES='';var SEM='';var SRS='';var SCS ='';varRES='';//*************************************************//
// Modify individual options here://RSRO = '1';RROS = '1';CRL = 'Email~anthony.m#playmakercrm.com;FirstName~Anthony;LastName~Miranda;Role~Signer 1;RoutingOrder~1;SignNow~1,Email~client#domain.com;FirstName~Client;LastName~Name;Role~Signer 2;RoutingOrder~2;SignNow~1,Email~john.g#playmakercrm.com;FirstName~John;LastName~Griscavage;Role~Signer 3;RoutingOrder~3;SignNow~0,Email~anthony.m#playmakercrm.com;FirstName~Anthony;LastName~Miranda;Role~Signer 4;RoutingOrder3~;SignNow~0,Email~adam.bishop#playmakercrm.com;FirstName~Adam;LastName~Bishop;Role~Signer 5;RoutingOrder~3;SignNow~0,Email~accounting#playmakercrm.com;FirstName~Accounting;LastName~Department;Role~Signer 6;RoutingOrder~3;SignNow~0,Email~{!Opportunity.OwnerEmail};FirstName~{!Opportunity.OwnerFirstName};LastName~{!Opportunity.OwnerLastName};Role~Signer 7;RoutingOrder~3;SignNow~0,Email~laura.mcdavid#playmakercrm.com;FirstName~Laura;LastName~McDavid;Role~Signer 8;RoutingOrder~3;SignNow~0'; OCO = 'Tag';LA = '1';STB = '1';SSB = '1';SES = '1';SEM = '1';SRS = '1';
//********* Page Callout (Do not modify) *********//window.location.href ="/apex/dsfs__DocuSign_CreateEnvelope?DSEID=0&SourceID={!Opportunity.Id}&RC="+RC+"&RSL="+RSL+"&RSRO="+RSRO+"&RROS="+RROS+"&CCRM="+CCRM+"&CCTM="+CCTM+"&CRCL="+CRCL+"&CRL="+CRL+"&OCO="+OCO+"&DST="+DST+"&CCNM="+CCNM+"&LA="+LA+"&CEM="+CEM+"&CES="+CES+"&SRS="+SRS+"&STB="+STB+"&SSB="+SSB+"&SES="+SES+"&SEM="+SEM+"&SRS="+SRS+"&SCS="+SCS+"&RES="+RES;
//*******************************************//
UPDATED CODE YET AGAIN. Removed all recipients except one from the Custom Recipeint List. Button still does not fire. It does nothing. could it be something else i am missing in salesforce?
Here is the updated code with only one recipient:
{!REQUIRESCRIPT("/apex/dsfs__DocuSign_JavaScript")}
//********* Option Declarations (Do not modify )*********//var RC = '';var RSL='';var RSRO='';var RROS='';var CCRM='';var CCTM='';varCCNM='';var CRCL=''; var CRL='';var OCO='';var DST='';var LA='';var CEM='';varCES='';var STB='';varSSB='';var SES='';var SEM='';var SRS='';var SCS ='';varRES='';//*************************************************//
// Modify individual options here://RSRO = '1';RROS = '1';CRL = 'Email~anthony.m#playmakercrm.com;FirstName~Anthony;LastName~Miranda;Role~Signer 1;RoutingOrder~1;SignNow~1'; OCO = 'Tag';LA = '1';STB = '1';SSB = '1';SES = '1';SEM = '1';SRS = '1';
//********* Page Callout (Do not modify) *********//window.location.href ="/apex/dsfs__DocuSign_CreateEnvelope?DSEID=0&SourceID={!Opportunity.Id}&RC="+RC+"&RSL="+RSL+"&RSRO="+RSRO+"&RROS="+RROS+"&CCRM="+CCRM+"&CCTM="+CCTM+"&CRCL="+CRCL+"&CRL="+CRL+"&OCO="+OCO+"&DST="+DST+"&CCNM="+CCNM+"&LA="+LA+"&CEM="+CEM+"&CES="+CES+"&SRS="+SRS+"&STB="+STB+"&SSB="+SSB+"&SES="+SES+"&SEM="+SEM+"&SRS="+SRS+"&SCS="+SCS+"&RES="+RES;
//*******************************************//
Looks like your page callouts had linebreaks (if copied direct from the DocuSign documentation they would). Try putting the variables between this:
{!REQUIRESCRIPT("/apex/dsfs__DocuSign_JavaScript")}
//********* Option Declarations (Do not modify )*********// var RC =
'';var RSL='';var RSRO='';var RROS='';var CCRM='';var CCTM='';var
CCNM='';var CRCL=''; var CRL='';var OCO='';var DST='';var LA='';var
CEM='';var CES='';var STB='';var SSB='';var SES='';var SEM='';var
SRS='';var SCS ='';var RES='';
//*************************************************//
// Modify individual options here://
//********* Page Callout (Do not modify) *********//
window.location.href =
"/apex/dsfs__DocuSign_CreateEnvelope?DSEID=0&SourceID={!Opportunity.Id}&RC="+RC+"&RSL="+RSL+"&RSRO="+RSRO+"&RROS="+RROS+"&CCRM="+CCRM+"&CCTM="+CCTM+"&CRCL="+CRCL+"&CRL="+CRL+"&OCO="+OCO+"&DST="+DST+"&CCNM="+CCNM+"&LA="+LA+"&CEM="+CEM+"&CES="+CES+"&SRS="+SRS+"&STB="+STB+"&SSB="+SSB+"&SES="+SES+"&SEM="+SEM+"&SRS="+SRS+"&SCS="+SCS+"&RES="+RES;
//*******************************************//
The documentation for creating custom buttons shows that the CRL takes a string parameter. However, your CRL value is not valid because:
You prematurely close the string after the Signer 1 person
You have empty CRL information after the Signer 1 person
You still have a hard return after the signer 7 person
You don't close the string after the last person.
You're missing a value for SignNow for signer 5
Also, it may be an issue that you're using an email alias for the accounting group. It would probably be better to use DocuSign Signing Groups. I don't know if that feature is supported in the Salesforce integration yet or not.
To debug, first add a return after each comma in the CRL value and check that each line (each recipient) is complete:
RSRO = '1';RROS = '1';CRL = '
Email~anthony.m#playmakercrm.com;FirstName~Anthony;LastName~Miranda;Role~Signer 1;RoutingOrder~1;SignNow~1,
Email~john.g#playmakercrm.com;FirstName~John;LastName~Griscavage;Role~Signer 3;RoutingOrder~3;SignNow~0,
Email~anthony.m#playmakercrm.com;FirstName~Anthony;LastName~Miranda;Role~Signer 4;RoutingOrder3~;SignNow~0,
Email~adam.bishop#playmakercrm.com;FirstName~Adam;LastName~Bishop;Role~Signer 5;RoutingOrder~3;SignNow~0,
Email~accounting#playmakercrm.com;FirstName~Accounting;LastName~Department;Role~Signer 6;RoutingOrder~3;SignNow~0,
Email~{!Opportunity.OwnerEmail};FirstName~{!Opportunity.OwnerFirstName};LastName~{!Opportunity.OwnerLastName};Role~Signer 7;RoutingOrder~3;SignNow~0,
Email~laura.mcdavid#playmakercrm.com;FirstName~Laura;LastName~McDavid;Role~Signer 8;RoutingOrder~3;SignNow~0
';
OCO = 'Tag';LA = '1';STB = '1';SSB = '1';SES = '1';SEM = '1';SRS = '1';
(Note the apostrophe at the start and end of the CRL value)
Next, remove the returns from the CRL value and hopefully it will work for you:
RSRO = '1';RROS = '1';CRL = 'Email~anthony.m#playmakercrm.com;FirstName~Anthony;LastName~Miranda;Role~Signer 1;RoutingOrder~1;SignNow~1,Email~john.g#playmakercrm.com;FirstName~John;LastName~Griscavage;Role~Signer 3;RoutingOrder~3;SignNow~0,Email~anthony.m#playmakercrm.com;FirstName~Anthony;LastName~Miranda;Role~Signer 4;RoutingOrder3~;SignNow~0,Email~adam.bishop#playmakercrm.com;FirstName~Adam;LastName~Bishop;Role~Signer 5;RoutingOrder~3;SignNow~0,Email~accounting#playmakercrm.com;FirstName~Accounting;LastName~Department;Role~Signer 6;RoutingOrder~3;SignNow~0,Email~{!Opportunity.OwnerEmail};FirstName~{!Opportunity.OwnerFirstName};LastName~{!Opportunity.OwnerLastName};Role~Signer 7;RoutingOrder~3;SignNow~0,Email~laura.mcdavid#playmakercrm.com;FirstName~Laura;LastName~McDavid;Role~Signer 8;RoutingOrder~3;SignNow~0'; OCO = 'Tag';LA = '1';STB = '1';SSB = '1';SES = '1';SEM = '1';SRS = '1';
I want to insert data into two different database.
Both the database are on different servers & both are different applications.
First application is of Codeigniter.
Second application id of Open Cart.
What should I do to insert the data into both database table.
should I am using nusoap or simple create second data connection and pass the value.
please help me out....
Database configuration:(you can can configure multiple database)
//default/main database
$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'root';
$db['default']['password'] = '';
$db['default']['database'] = 'database1';
$db['default']['dbdriver'] = 'mysql';
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;
//another database
$db['db2']['hostname'] = 'localhost';
$db['db2']['username'] = 'root';
$db['db2']['password'] = '';
$db['db2']['database'] = 'database2';
$db['db2']['dbdriver'] = 'mysql';
$db['db2']['dbprefix'] = '';
$db['db2']['pconnect'] = FALSE;
$db['db2']['db_debug'] = TRUE;
$db['db2']['cache_on'] = FALSE;
$db['db2']['cachedir'] = '';
$db['db2']['char_set'] = 'utf8';
$db['db2']['dbcollat'] = 'utf8_general_ci';
$db['db2']['swap_pre'] = '';
$db['db2']['autoinit'] = TRUE;
$db['db2']['stricton'] = FALSE;
load the database
$this->db2 = $CI->load->database('db2', TRUE);
insert data using the db instance
$data = array(
'title' => 'My title' ,
'name' => 'My Name' ,
'date' => 'My date'
);
$this->db2->insert('mytable', $data);
more info - http://www.codeigniter.com/userguide2/database/connecting.html
here have an example of connecting two database in ci http://avenir.ro/codeigniter-connect-two-different-databases/
I am working on codeigniter app to allow user to add edit and modify database.
I want to repeat this code by loop:
$db['db1']['hostname'] = 'localhost';
$db['db1']['username'] = 'ts4l_wp13';
$db['db1']['password'] = 'O&3D6c(0zD70.^9';
$db['db1']['database'] = 'ts4l_wp13';
$db['db1']['dbdriver'] = 'mysql';
$db['db1']['dbprefix'] = '';
$db['db1']['pconnect'] = FALSE;
$db['db1']['db_debug'] = TRUE;
$db['db1']['cache_on'] = FALSE;
$db['db1']['cachedir'] = '';
$db['db1']['char_set'] = 'utf8';
$db['db1']['dbcollat'] = 'utf8_general_ci';
$db['db1']['swap_pre'] = '';
$db['db1']['autoinit'] = TRUE;
$db['db1']['stricton'] = FALSE;
I do this:
#$get_data = mysql_query("SELECT * FROM `database_name`");
while($getdata = mysql_fetch_assoc($get_data)){
$id='db'.$getdata['id'];
$iid="$id";
$db["$iid"]['hostname'] = 'localhost';
$db["$iid"]['username'] = $getdata['username'];
$db["$iid"]['password'] = $getdata['password'];
$db["$iid"]['database'] = $getdata['name'];
$db["$iid"]['dbdriver'] = 'mysql';
$db["$iid"]['dbprefix'] = '';
$db["$iid"]['pconnect'] = FALSE;
$db["$iid"]['db_debug'] = TRUE;
$db["$iid"]['cache_on'] = FALSE;
$db["$iid"]['cachedir'] = '';
$db["$iid"]['char_set'] = 'utf8';
$db["$iid"]['dbcollat'] = 'utf8_general_ci';
$db["$iid"]['swap_pre'] = '';
$db["$iid"]['autoinit'] = TRUE;
$db["$iid"]['stricton'] = FALSE;
}
and this block.
// Loading db and running query.
$CI = &get_instance();
$this->db1 = $CI->load->database('db1', TRUE);
$this->db1->set($data);
$this->db1->insert($this->_table_name);
$id=$this->db1->insert_id();
I do this:
$this->load->model('mdb_m');
$dbms =$this->mdb_m->get();
if (count($dbms)) {
foreach ($dbms as $dbm) {
$mid=$dbm->id;
$dbc='db'.$mid;
$CI = &get_instance();
$this->db.$mid = $CI->load->database( "$dbc" , TRUE);
$this->db.$mid->set($data);
$this->db.$mid->insert($this->_table_name);
}
}
But it only insert at first database in the array then stop and retrive this error "You have specified an invalid database connection group."
you can get brief information of using multiple database from here.As you have mentioned.
https://ellislab.com/codeigniter/user-guide/database/connecting.html
for better approach you can make a loader file to load a database.I was in same problem and got the clear visualization from here
https://coderwall.com/p/_kyjvg/codeigniter-loading-up-multiple-databases
refer here and if still confused please revert back to me thankyou.
I've been looking into using multiple databases with CodeIgniter. If I know what the databases are ahead of time, then I can set the information in the config file and then call whichever database group I need.
In my situation, however, I need to store that database information in another database. It is sort of a master database with general information about a customer including the database and credentials that the customer's data is stored in. This vendor can then add customers whenever they want and have each customer's data segregated in different databases.
How can I set the database and credentials based on the values I get back from the master database in CodeIgniter, or is there even a way to do that?
Can anyone point me in the right direction? Thanks in advance for any advice.
From the docs ( https://www.codeigniter.com/user_guide/database/connecting.html ) :
The first parameter of this function can optionally be used to specify
a particular database group from your config file, or you can even
submit connection values for a database that is not specified in your
config file.
So you would do something like this, replacing the values with values from the master database:
$config['hostname'] = "localhost";
$config['username'] = "myusername";
$config['password'] = "mypassword";
$config['database'] = "mydatabase";
$config['dbdriver'] = "mysql";
$config['dbprefix'] = "";
$config['pconnect'] = FALSE;
$config['db_debug'] = TRUE;
$config['cache_on'] = FALSE;
$config['cachedir'] = "";
$config['char_set'] = "utf8";
$config['dbcollat'] = "utf8_general_ci";
$this->load->database($config);
If you need to maintain a connection to the master database and the customer database, then change the last line to:
$customer_db = $this->load->database($config, TRUE);
// to use the master database:
$this->db->query("SELECT * FROM my_table");
// to then use the customer database:
$customer_db->query("SELECT * FROM whatever");
Make the master a default database and the customer for second database
$active_group = 'default';
$active_record = TRUE;
$db['default']['hostname'] = '';
$db['default']['username'] = '';
$db['default']['password'] = '';
$db['default']['dbdriver'] = '';
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;
$db['secondDatabase']['hostname'] = '';
$db['secondDatabase']['username'] = '';
$db['secondDatabase']['password'] = '';
$db['secondDatabase']['dbdriver'] = '';
$db['secondDatabase']['dbprefix'] = '';
$db['secondDatabase']['pconnect'] = TRUE;
$db['secondDatabase']['db_debug'] = TRUE;
$db['secondDatabase']['cache_on'] = FALSE;
$db['secondDatabase']['cachedir'] = '';
$db['secondDatabase']['char_set'] = 'utf8';
$db['secondDatabase']['dbcollat'] = 'utf8_general_ci';
$db['secondDatabase']['swap_pre'] = '';
$db['secondDatabase']['autoinit'] = TRUE;
$db['secondDatabase']['stricton'] = FALSE;
you can load the second database in controller or in model by
$DB2 = $this->load->database('secondDatabase', TRUE);
/** config/database.php **/
$active_group = 'default';
$active_record = TRUE;
$db['default']['hostname'] = '';
$db['default']['username'] = '';
$db['default']['password'] = '';
$db['default']['dbdriver'] = '';
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = (ENVIRONMENT !== 'production');
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;
/** Your controller or model **/
//by default the master database will be loaded and you can directly access db using $this->db
$result = $this->db->query("SELECT * FROM `your_table`")->limit(1)->get()->result();
$config['dbxyz']['hostname'] = $result->hostname;
$config['dbxyz']['username'] = $result->username;
$config['dbxyz']['password'] = $result->password;
$config['dbxyz']['dbdriver'] = '';
$config['dbxyz']['dbprefix'] = '';
$config['dbxyz']['pconnect'] = TRUE;
$config['dbxyz']['db_debug'] = (ENVIRONMENT !== 'production');
$config['dbxyz']['cache_on'] = FALSE;
$config['dbxyz']['cachedir'] = '';
$config['dbxyz']['char_set'] = 'utf8';
$config['dbxyz']['dbcollat'] = 'utf8_general_ci';
$config['dbxyz']['swap_pre'] = '';
$config['dbxyz']['autoinit'] = TRUE;
$config['dbxyz']['stricton'] = FALSE;
//load database config
$this->config->load('database');
//Set database config dynamically
$this->config->set_item('dbxyz', $config);
//Now you can load the new database using
$this->dbxyz = $this->load->database('dbxyz');
NOTE: For more details, refer Config Class Codeigniter documentation
Add below line in application\config\database.php
$db['mydb2']['hostname'] = 'localhost';
$db['mydb2']['username'] = 'root';
$db['mydb2']['password'] = '';
$db['mydb2']['database'] = 'ci2';
$db['mydb2']['dbdriver'] = 'mysql';
$db['mydb2']['dbprefix'] = '';
$db['mydb2']['pconnect'] = TRUE;
$db['mydb2']['db_debug'] = TRUE;
$db['mydb2']['cache_on'] = FALSE;
$db['mydb2']['cachedir'] = '';
$db['mydb2']['char_set'] = 'utf8';
$db['mydb2']['dbcollat'] = 'utf8_general_ci';
$db['mydb2']['swap_pre'] = '';
$db['mydb2']['autoinit'] = TRUE;
$db['mydb2']['stricton'] = FALSE;
Now we use our second database in our Controller and model like below.
$CI = &get_instance();
$this->db2 = $CI->load->database('mydb2', TRUE);
$qry = $this->db2->query("SELECT * FROM employee");
print_r($qry->result());
I have taken reference from http://www.tutsway.com/use-multiple-db-connections-in-codeigniter.php .It's work for me.