سؤال

لا بد لي من استخدام متغير (مجموعة نتائج الاستعلام) في كولد فيوجن, ، والتي ستحصل على النتائج من قاعدة بيانات التطبيقات الأخرى، والمتاجر في تطبيق Coldfusion.

الفكرة الرئيسية هي أنني بحاجة إلى استدعاء قاعدة بيانات التطبيق الأخرى فقط في وقت بدء تشغيل الخادم وتخزين النتائج محليًا.وأحتاج إلى قراءة المتغير في الصفحات الأخرى في طلبي.لن أقوم بالكتابة فوق هذا المتغير في أي صفحة.

على جوجل وجدت أن 'onApplicationStart' مفيد لتعيين المتغيرات في وقت بدء تشغيل التطبيق.

يستخدم onApplicationStart بخير أم أن هناك أي طريقة أخرى؟يمكننا تعيين متغير في وقت بدء التشغيل (مرة واحدة).

لو onApplicationStart على ما يرام:كيف تستعمل؟ربما يكون أي رابط يتم شرحه بوضوح مفيدًا.

هل كانت مفيدة؟

المحلول

حسنا، هذا يعتمد.كم مرة سيتم تحديث بيانات الاستعلام هذه؟إذا كان بالفعل لا يتغير، فإن onApplicationStart() هو مكان جيد لوضعه.ومع ذلك، إذا كان سيتغير بين الحين والآخر، فيمكنك فقط إخبار Coldfusion بذلك تخزين الاستعلام مؤقتًا ل فترة زمنية معينة, ، فلن تحتاج إلى العبث بـ onApplicationStart()، ولكن عند استدعاء الاستعلام، سيُرجع النتيجة المخزنة مؤقتًا تلقائيًا (خلال الفترة الزمنية المحددة).

بغض النظر، أود أن أكتب وظيفة مخصصة لاسترداد البيانات.بعد ذلك سيكون من السهل الاتصال به من onApplicationStart() أو من أي مكان آخر.

Startup.cfc:( سمها ما شئت )

<!--- Replace the datasource name with your db name --->
<cffunction name="getStartupQuery" hint="Returns a query recordset for startup">
    <cfargument name="datasource" required="no" type="string" default="OtherAppDB">
    <!--- Init the query variable --->
    <cfset var result = queryNew("id")>

    <!-- Get the query dataset --->
    <cfquery name="result" datasource="#arguments.datasource#">
         YOUR QUERY HERE
    </cfquery>

    <cfreturn result>
</cffunction>

تطبيق.cfc:(فقط الأجزاء المهمة)

<cffunction name="onApplicationStart">
    <!--- init the startup.cfc, then retrieve the data
    and save it to the application scope. Remember the component name must match
    your component above --->
    <cfset var startup = createObject("component", "startup")>
    <cfset application.varFromOtherDB = startup.getStartupQuery()>
    <cfreturn true>
</cffunction>

الآن، يجب أن تكون قادرًا على الوصول إلى هذا المتغير من أي CFM أو CFC في تطبيقك باستخدام:

<cfset myNewVar = application.varFromOtherDB>
or
#application.varFromOtherDB#

إذا كنت تستخدم طريقة onApplicationStart()، فإنني أوصي بشدة بتنفيذ طريقة لإعادة تشغيل التطبيق.على سبيل المثال، انظر هذه المناقشة الأخرى.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top