Quotes

Teklif başlığını "Ahmet Yılmaz - FUE Standart" biçiminde otomatik yazar; teklif listesi, PDF adı ve e-posta konusu kim için hangi ürün olduğunu ilk bakışta söyler.

Modül
Quotes
Tetik
Workflow · On Create / On Edit
Argüman
quoteId = Quote Id
Uzunluk
111 satır Deluge
Güncelleme

Ne yapar

Önce ilişkili Kişi adını, o yoksa Firma adını alır; teklifin ilk ürün satırındaki ürün adını ekler. İkisi de varsa Kişi - Ürün, yalnız biri varsa o. Üretilen başlık mevcutla aynıysa kayda dokunmaz.

Kurulum mantığı

  1. 01

    Workflow Rules altında modül Quotes, tetik On Create ve On Edit (Contact_Name, Account_Name ya da ürün satırı değiştiğinde). Ürün satırı alan değişikliği koşulunda seçilemiyorsa On Edit kuralını alan koşulu olmadan kurun.

  2. 02

    Eylem Function, argüman quoteId, Quote Id alanına eşlenir.

  3. 03

    Fonksiyon başlığın elle yazılıp yazılmadığını ayırt etmez; ürettiği başlık mevcut başlıktan farklıysa her tetiklemede üzerine yazar. Subject zorunlu alan olduğundan oluşturma sırasında girilen başlık da ilk çalışmada değişir. Yalnız kişi, firma ve ürün bilgisinin hiçbiri yoksa mevcut başlık olduğu gibi kalır. Kodda currentSubject != "" gibi bir boşluk kontrolü işe yaramaz: Subject hiçbir zaman boş gelmediği için fonksiyon hiç yazmaz. Elle başlığı korumak için Quotes modülüne "Başlığı elle koru" gibi özel bir onay kutusu alanı ekleyin ve kurala "bu alan işaretli değilse" koşulunu koyun; kutu işaretlenmeden elle değiştirilen başlık yine ezilir. Tetiği yalnız On Create ile sınırlamak da sonraki elle düzenlemeleri korur, ancak kişi, firma ya da ürün sonradan değişirse başlık güncellenmez.

Alan eşlemesi

Koda yazılan alanlar ve kendi org'unuzda dikkat etmeniz gerekenler.

AlanDeğerNot
Subject<Kişi veya Firma> - <İlk ürün>Ayraç kısa tire; kendi standardınızla değiştirin.
Contact_NameokunurÖncelikli kaynak.
Account_NameokunurKişi yoksa.
Product_DetailsokunurYalnız ilk satırın ürünü.

Deluge kodu

Kodu olduğu gibi kopyalayın; değiştirmeniz gereken yerler yukarıdaki tabloda işaretli. İzle düğmesi, fonksiyonu adım adım okutur.

void automation.renameQuoteWithContactAndProduct(String quoteId)
void automation.renameQuoteWithContactAndProduct(String quoteId)
{
try
{
	info "===== Quote Başlık Güncelleme Başladı =====";
	info "Quote ID: " + quoteId;

	if(quoteId == null || quoteId.trim() == "")
	{
		info "Quote ID boş.";
		return;
	}

	quoteRecord = zoho.crm.getRecordById("Quotes",quoteId.toLong());

	if(quoteRecord == null || quoteRecord.isEmpty())
	{
		info "Quote bulunamadı.";
		return;
	}

	customerName = "";
	productName = "";

	// CONTACT
	contactLookup = quoteRecord.get("Contact_Name");

	if(contactLookup != null)
	{
		if(contactLookup.get("name") != null)
		{
			customerName = contactLookup.get("name").toString().trim();
		}
	}

	// CONTACT YOKSA ACCOUNT
	if(customerName == "")
	{
		accountLookup = quoteRecord.get("Account_Name");

		if(accountLookup != null)
		{
			if(accountLookup.get("name") != null)
			{
				customerName = accountLookup.get("name").toString().trim();
			}
		}
	}

	// İLK ÜRÜN
	productLines = quoteRecord.get("Product_Details");

	if(productLines != null && productLines.size() > 0)
	{
		firstLine = productLines.get(0);
		productLookup = firstLine.get("product");

		if(productLookup != null)
		{
			if(productLookup.get("name") != null)
			{
				productName = productLookup.get("name").toString().trim();
			}
		}
	}

	newSubject = "";

	if(customerName != "" && productName != "")
	{
		newSubject = customerName + " - " + productName;
	}
	else if(customerName != "")
	{
		newSubject = customerName;
	}
	else if(productName != "")
	{
		newSubject = productName;
	}

	if(newSubject == "")
	{
		info "Başlık oluşturmak için kişi, firma veya ürün bulunamadı.";
		return;
	}

	currentSubject = "";

	if(quoteRecord.get("Subject") != null)
	{
		currentSubject = quoteRecord.get("Subject").toString().trim();
	}

	if(currentSubject == newSubject)
	{
		info "Quote başlığı zaten güncel.";
		return;
	}

	updateMap = Map();
	updateMap.put("Subject",newSubject);

	updateResponse = zoho.crm.updateRecord("Quotes",quoteId.toLong(),updateMap);
	info "Güncelleme sonucu: " + updateResponse;
}
catch (e)
{
	info "Hata: " + e.toString();
}
}
4 ADIMİzle düğmesi fonksiyonu adım adım aydınlatır.

Dikkat edilecekler

  • Çok ürünlü teklif

    Yalnız ilk satır başlığa girer; "…ve 3 ürün daha" istenirse productLines.size() kullanılır.

  • On Edit döngüsü

    Kod updateRecord çağrısına options_map vermediği için fonksiyonun yazdığı Subject workflow kurallarını yeniden tetiklemez; döngü oluşmaz. Aynı başlık kontrolü yalnız gereksiz API çağrısını önler. Subject değişikliğini izleyen başka bir workflow kuralınız varsa, bu yazma onu da çalıştırmaz.

İlgili kayıtlar

  1. 01
    Quotes

    Teklif fatura adresini teslimat adresine kopyala

    Teklifin fatura adresini teslimat adresine kopyalar. Fatura adresi tamamen boşsa dokunmaz; dolu teslimat adresini korumaz, üstüne yazar.

    Workflow · On Create / On Edit69 satır Deluge
  2. 12
    Quotes · Accounts

    Firma fatura adresini teklife aktar

    Teklif açıldığında bağlı firmanın fatura adresini teklifin Billing alanlarına kopyalar; teklif PDF'inde adres eksik çıkmaz, temsilci beş alanı elle doldurmaz.

    Workflow · On Create98 satır Deluge
  3. 03
    Leads

    Mükerrer lead'leri telefondan birleştir

    Aynı telefon numarasıyla ikinci kez gelen lead'leri elle karşılaştırmadan tek kayda indirir; reklam formu, WhatsApp ve web sitesinden ayrı ayrı gelen kayıtlar tek lead'de toplanır.

    Workflow · On Create · On Edit (onay kutusu)300 satır Deluge

30+

proje

%99

müşteri memnuniyeti

3 kanal

kurulum sonrası destek

İletişim

Mevcut sisteminiz, hedefiniz ve takviminize göre somut bir teklif ve canlı demo hazırlıyoruz. Sözleşme öncesi taahhüt yok.

Görüşme planla

Bilgileriniz KVKK Aydınlatma Metni kapsamında işlenir. 24 saat içinde dönüş yapıyoruz.