תכנות

4.6k נושאים 37.8k פוסטים

קטגוריות משנה


  • 22 נושאים
    137 פוסטים

    שלום לכולם
    התבקשתי רבות מחברים פיתרון לבעיה הידועה לבצע מיזוג דואר, אך לשמור קובץ PDF נפרד לכל רשומה, עם שם מותאם אישית.

    אפרט כאן במדריך שלב אחר שלב איך לבצע זאת, תהיו איתי עד הסוף מקווה שתהנו...

    נתחיל...

    שלב א:

    ראשית בקובץ ה- Excel של רשימת הנמענים, הוסיפו לטבלת הנתונים ארבעה עמודות בשמות כדלהלן (חשוב שהשמות יהיו מדויקים ללא רווחים מיותרים - לתשומת ליבכם):

    DocFolderPath

    DocFileName

    PdfFolderPath

    PdfFileName

    שלב ב:
    צרו שתי תיקיות נפרדות, אחד לקבצי הפלט בפורמט docx, ואחד לקבצי הקלט בפורמט pdf, העתיקו את נתיב התיקייה של קבצי ה- docx והדביקו אותם עבור כל רשומה בשדה שיצרתם בשם DocFolderPath, לאחמ"כ חזרו על הפעולה והפעם העתיקו את נתיב התיקייה של קובצי ה- PDF והדביקו בשדה PdfFolderPath.
    בשדה DocFileName כתבו את השם של הקובץ עבור הרשומה - ניתן להשתמש בנוסחאות, כמו"כ בשדה PdfFileName כתבו את שם הקובץ כנ"ל.

    שלב ג:
    פתחו את קובץ ה- word והשלימו את פעולת המיזוג כרגיל, עצבו את המסמך כרצונכם.

    שלב ד:
    פתחו את לשונית מפתחים בקובץ ה- word פתחו את עורך הקוד הוסיפו מודל חדש מצו"ב צילום מסך:
    3eb2538f-9ab1-41eb-a1df-452212916da6-image.png

    הדביקו את הקוד הבא:

    Sub MailMergeToPdfBasic() ' Mark the start of the Subroutine (i.e. Macro) and name it "MailMergeToPdf" ' Macro created by Imnoss Ltd ' Please share freely while retaining attribution ' Last Updated 2021-05-03 Dim masterDoc As Document, singleDoc As Document, lastRecordNum As Long ' Create variables ("Post-it Notes") for later use Set masterDoc = ActiveDocument ' Identify the ActiveDocument (foremost doc when Macro run) as "masterDoc" masterDoc.MailMerge.DataSource.ActiveRecord = wdLastRecord ' jump to the last active record (active = ticked in edit recipients) lastRecordNum = masterDoc.MailMerge.DataSource.ActiveRecord ' retrieve the record number of the last active record so we know when to stop masterDoc.MailMerge.DataSource.ActiveRecord = wdFirstRecord ' jump to the first active record (active = ticked in edit recipients) Do While lastRecordNum > 0 ' create a loop, lastRecordNum is used to end the loop by setting to zero (see below) masterDoc.MailMerge.Destination = wdSendToNewDocument ' Identify that we are creating a word docx (and no e.g. an email) masterDoc.MailMerge.DataSource.FirstRecord = masterDoc.MailMerge.DataSource.ActiveRecord ' Limit the selection to just one document by setting the start ... masterDoc.MailMerge.DataSource.LastRecord = masterDoc.MailMerge.DataSource.ActiveRecord ' ... and end points to the active record masterDoc.MailMerge.Execute False ' run the MailMerge based on the above settings (i.e. for one record) Set singleDoc = ActiveDocument ' Identify the ActiveDocument (foremost doc after running the MailMerge) as "singleDoc" singleDoc.SaveAs2 _ FileName:=masterDoc.MailMerge.DataSource.DataFields("DocFolderPath").Value & Application.PathSeparator & _ masterDoc.MailMerge.DataSource.DataFields("DocFileName").Value & ".docx", _ FileFormat:=wdFormatXMLDocument ' Save "singleDoc" as a word docx with the details provided in the DocFolderPath and DocFileName fields in the MailMerge data singleDoc.ExportAsFixedFormat _ OutputFileName:=masterDoc.MailMerge.DataSource.DataFields("PdfFolderPath").Value & Application.PathSeparator & _ masterDoc.MailMerge.DataSource.DataFields("PdfFileName").Value & ".pdf", _ ExportFormat:=wdExportFormatPDF ' Export "singleDoc" as a PDF with the details provided in the PdfFolderPath and PdfFileName fields in the MailMerge data singleDoc.Close False ' Close "singleDoc", the variable "singleDoc" can now be used for the next record when created If masterDoc.MailMerge.DataSource.ActiveRecord >= lastRecordNum Then ' test if we have just created a document for the last record lastRecordNum = 0 ' if so we set lastRecordNum to zero to indicate that the loop should end Else masterDoc.MailMerge.DataSource.ActiveRecord = wdNextRecord ' otherwise go to the next active record End If Loop ' loop back to the Do start End Sub ' Mark the end of the Subroutine

    שלב ה וסיום:
    סגרו את עורך הקוד.
    לחצו על כפתור פקודות מאקרו שבכרטיסיית מפתחים, בחרו את המאקרו בשם MailMergeToPdfBasic ולחצו הפעל מצו"ב צילום מסך
    3890ce69-c0e9-4f30-89ce-3e97b7de750b-image.png

    כעת שבו בנחת והמתינו עד ליצירת כל הקבצים, להנאתכם תפתחו את תיקיות הפלט שיצרתם וגלו שהיא מלאה קבצים קובץ לכל רשומה בשם המתאים שהגדרתם לה.

    מקור

  • ארכיון האתר הקודם והחביב קוד-613

    1k נושאים
    10k פוסטים

    @אבי אמר בשוב, צילומי הצ'קים בבנקים:

    התעסקתי לאחרונה עם סורקים של חברת MAGTEK, הם ידידותיים ונוחים להתממשקות, אבל כמדומני שהבנקים בישראל מוכנים לקבל סריקות רק מסורקים של חברת PANINI

    @אבי איך יוצרים אתך קשר?

  • 31 נושאים
    133 פוסטים

    יש כמה נוסחאות חדשות שממש משנות את כללי המשחק בגוגל שיטס:

    CHOOSECOLS לבחירת עמודות ממערך CHOOSEROWS לבחירת שורות ממערך WRAPROWS להמרת מערך חד ממדי לרב ממדי - פריסה לשורות WRAPCOLS כנ"ל - פריסה לעמודות HSTACK ו VSTACK - הפעולה של {} אך בלי סוגריים - לא משמעותי לכאורה

    והעולה על כולנה, סוף סוף:

    LET - ליצירת משתנים.

    כל אלו מצטרפות לפונקציות שנוספו מוקדם יותר -
    https://blog.sheetgo.com/google-sheets-formulas/10-new-google-sheets-functions/

    וכלול בתוכם - LAMBDA, MAP (חלקי - לא עובד לקנן ב MAP ודומיו מערכים אחרים), פונקציות בעלות שם, וכו' ע"ש בקישור.

  • עזרה בשליחת דוח אקסס במייל

    הועבר
    2
    0 הצבעות
    2 פוסטים
    98 צפיות

    @מוטי-מן
    באיזו צורה אתה מפעיל את הקוד?
    תכניס בטופס תיבת טקסט ששם אתה מכניס את כתובת המייל של הנמען
    תפתח משתנה ותעביר לשם את הכתובת הנמען
    ובמיקום של הנמען תכניס את המשתנה
    אולי בהמשך יהיה לי זמן לכתוב לך את הקוד במלואו

  • גמטריה ב php

    הועבר
    3
    0 הצבעות
    3 פוסטים
    194 צפיות

    @חוקר
    משום מה לא הצלחתי לקבל את מה שרציתי מהקוד שלך
    אז שיפצרתי את הקוד שלי אפשר להשתמש עם זה בשמחה

    //גימטריה מספרים לאותיות function convertWord($word) { $convertLetter = function ($letter) { $values = [ 1 => 'א', 2 => 'ב', 3 => 'ג', 4 => 'ד', 5 => 'ה', 6 => 'ו', 7 => 'ז', 8 => 'ח', 9 => 'ט', 10 => 'י', 20 => 'כ', 30 => 'ל', 40 => 'מ', 50 => 'נ', 60 => 'ס', 70 => 'ע', 80 => 'פ', 90 => 'צ', 100 => 'ק', 200 => 'ר', 300 => 'ש', 400 => 'ת', ]; return $values[$letter]; }; if (strlen($word)== 1){ $word = $convertLetter($word); } elseif (strlen($word)== 2){ $a = (intdiv($word, 10))*10; $b = $word-$a; $word = $convertLetter($a).$convertLetter($b); } elseif (strlen($word)== 3){ $a = (intdiv($word, 100))*100; $b = (intdiv(($word-$a), 10))*10; $c = $word-$a-$b; $word = $convertLetter($a).$convertLetter($b).$convertLetter($c); } $word = str_replace("י"."ה","טו",$word); $word = str_replace("י"."ו","טז",$word); return $word; }

    עריכה: זה עובד רק עד 499 (אני הייתי צריך את זה רק עד ל 200 אז זה מצוין בשבילי) מי שרוצה מוכן לשפר את זה

  • 2 הצבעות
    6 פוסטים
    119 צפיות

    הקדמה כללית לפרומיסים (למי שכבר מכיר איך פרומיס עובד יש פה הרבה אריכות מיותרת... אולי מי שעוד לא מכיר טוב יקבל מזה תועלת)
    ב-JS - כמו בכל שפה אחרת - יש פעולות שלוקחות זמן, מה ששונה ב-JS: שאנחנו מאוד לא רוצים להפסיק את הכל ולחכות עד שזה יקרה (כי כידוע יש רק ט'רד אחד, ואם הט'רד מושבת - כל הדף מושבת). הפתרון לזה הוא להקים תור של פעולות, בצורה שסיום פעולה א' תגרום להרצת פעולה ב' וכן הלאה, המשימה שלנו הוא רק ל"הצית את ניצוץ הראשון" של הפעולה הראשונה, וכל השאר רץ מאיליו בלי התערבות שלנו.
    בימי בראשית היו עושים את זה על ידי שהיו מעבירים לפעולה הראשונה את הפעולה השנייה, כך שהפעולה עצמה - שהיא יודעת מתי היא מסתיימת - היא תתחיל את הפעולה השניה, ולפעולה השנייה מעבירים את הפעולה השלישית, וכן הלאה. בעצם עשינו שרשרת של פעולות שכל טבעת בשרשרת מחזיקה את הפעולה הבאה.
    הבעיה בזה מבחינה תחבירית הוא שצורה זו מחייבת הרבה קינון. אם אנחנו רוצים להקים שרשרת של שלוש פעולות, סדר הדברים הוא שנכתוב את הפעולה הראשונה, נעביר לה את הפעולה השנייה, ולשנייה נעביר את השלישית. כולנו מכירים את פירמידת הגיהנום שזה גורם.
    אפשר לדמות את זה לשרשרת אמיתית שאם נרצה להוסיף עוד טבעת זה מחייב אותנו להתכופף לסוף השרשרת כדי להגיע לטבעת האחרונה כדי לתלות עליו עוד טבעות.
    הפתרון לזה הגיעה בצורת פרומיסים. בצורה של פרומיס - במקום שנעביר את הפעולה הבאה לפעולה הראשונה - הפעולה הראשונה מחזירה לנו ידית. ידית זו מיוחדת, שהיא מגיבה להצלחתה או כשלונה של הפעולה. ואנחנו מדביקים את הפעולה השנייה לידית של הפעולה הראשונה בצורה שהצלחת הפעולה הראשונה תגרום לפעולה השנייה להתחיל (סביבת JS דואגת לקסם הזה לעבוד).
    היתרון בזה הוא שאין צורך בקינון. יש לנו את הידית ביד ולא צריך להתכופף לתוך הפעולה כדי לקבל את המתלה שעליו אנו תולים את הפעולה הבאה.
    הרעיון של בנאי ה-Promise הוא לקחת פעולה שבנויה לקבל callback שזו צורת העבודה המקורית - זו המתלה שעליו בעבר היינו תולים את הפעולה הבאה - וליצור ממנה ידית/פרומיס שתגיב בצורה נכונה להצלחה וכשלון של הפעולה, והיא תשתמש לנו כידית לתלות עליו עוד פעולות.
    הבנאי של פרומיס מקבלת פונציה/פעולה שהיא מריצה, ובתוך הפונקציה כאשר קורה כשלון אתה אמור לאותת את זה על ידי קריאת reject ובמצב של הצלחה מאותתים את זה על ידי קריאה ל-resolve.

    @dovid אמר בכתיבה נכונה של פונקציית executor עבור פרומיס:

    זה מבלבל לי וזה גם סתם לדחוף לתוך פונקציית הפרומייז הקדמות בלתי נחוצות

    זו בעיה אחת. ענין של טעם טוב.

    להסביר יותר למוקשי הבנה כמוני או לאלה שהטעם הטוב מגיע להם אחרי התבוננות שכלית והוא עוד לא אינטואיטיבי אצלם:
    הטעם הטוב של המתכנת אמור להורות לו שאם פונקצייה מסויימת אמורה לפעול פעולה א' - שלא לערב שם דברים אחרים. והרי פונקציית ההרצה של הפרומיס נועד לעשות רק דבר אחד: המרת פעולה callback-ית לפרומיס על ידי הרצת הפעולה ה-callback-ית ואיתות הצלחתה/כשלונה לידית/פרומיס. ואם כן אין להוסיף שם עוד דברים.
    למה? כי כל מה שאתה מוסיף דברים שלא קשורים לענין - אתה בעצם מגרע. כי כבר לא ברור מה אתה רוצה לעשות.

    אני לא מזלזל. אבל יש בעיה אחרת שיגרום לכשלון של הקוד.
    אני שמתי לב לבעיה השנייה לפני הבעיה שאתה מזכיר.

    בעצם הבעיה של עירוב דברים לא קשורים היא מה שגורמת לבעיה השנייה שיכולה להכשיל את הקוד. (ולכן, שתי הפתרונות שאתה מציע נכונות לגמרי. כלומר, להוציא מתוך הפרומיס דברים אחרים לא קשורים.)

    הבעיה שעליו אני מדבר הוא כזה:
    כאשר אתה מעביר פונקציה לבנאי של הפרומיס, הבנאי לוקחת את הפונקציה ומריצה אותה. אחרי ההרצה הבנאי מאזינה לאיתותים כדי לקבל מידע על הצלחתה/כשלונה של הפעולה. בעת קבלת איתות, הבנאי תגיב על ידי הפיכת מצבה של הפרומיס ל-fulfilled או rejected.
    יש שתי צורות שהבנאי מקבלת איתותים אלו. א) על ידי פונקציות resolve\reject וב) על יד תפיסת חריגות. חריגה (exception) בקוד של הפעולה תגרום מיד ל-rejection של הפרומיס.

    כדי שהקוד תצליח, אנחנו חייבים לקבל מצב שבו אין מוצא אחרת מהפונקציה - רק resolve או reject או exception.
    אם משהו רביעי קורה, נישאר תקוע עם פרומיס "קפואה" שאף פעם לא נדע את מצבו, כי אין לנו דרך אחרת לאותת את מצב הפרומיס.

    הנקודה החשובה היא: שבפונקציה אסינכרונית אין דרך לתפוס שגיאות. מיד ברגע ההרצה קיבלת תשובה (בצורה של ידית/פרומיס) ועברת לשורה הבאה של הקוד. אתה לא מעוניין לקבל באמצע פונקצייה אחרת שגיאות לא קשורות.
    ולכן, גם אם קורה שגיאה, אף פעם לא נדע שזה קרה.

    בקוד לדוגמה שלנו: ייתכן מצב ש-getBar נכשלת, ואף פעם לא נדע כי אנחנו לא תופסים את השגיאה וגם מי שמריץ את הפומיס לא יתפוס אותה. וכך נקבל פרומיס "קפואה" שאף פעם לא תקבל איתות על הצלחה או כשלון.

    יש שתי דרכים לתקן את זה, אחת נכונה והשנייה לא נכונה. הנכונה היא מה ש @dovid כתב.
    הלא נכונה היא לנסות לתפוס כל השגיאות ולקרוא ל-reject כאשר יש שגיאה.

    function getFooPromise () { return new Promise(async (resolve, reject) => { try { const bar = await getBar(); bar.getFooCallbackStyle((error, data) => { if (error) return reject(error); resolve(data); }); } catch (e) { reject(e); } }); }

    פתרון זה לא נכון בגלל טיעון הטעם הטוב של @dovid.
    אם נכתוב את הפעולה עם טעם טוב, לעולם לא נצטרך לדבר כזה כי כל הפעולות בתוך הפרומיס יהיו סינכורוניות ובנאי הפרומיס כבר יתפוס את השגיאות של הפעולות הסינכורניות.

    (אם קראת עד לפה - שאפו...)

  • שליחת קובץ עם מיילגן (php)

    3
  • איך למחוק הודעה יוצאת בג'ימייל?

    הועבר
    24
    2 הצבעות
    24 פוסטים
    728 צפיות

    ככה הצלחתי להסתיר וגם למחוק את ההודעה

    function send() { let addressForSearch = 'hoduos123@gmail.com' // הכתובת שאת ההודעות ממנה אתה צריך להעביר let emailForTransfer = 'hoduos123@gmail.com' // המייל שאליו אתה צריך לשלוח את ההודעות let messages = GmailApp.search(`from:${addressForSearch}`) if (messages.length > 0) { messages.forEach(function (m) { let message = m.getMessages()[0] let subject = message.getSubject() let body = message.getBody() let attachments = message.getAttachments() var searchTerm = Utilities.getUuid(); var uidText = '<span style="color:transparent; display:none !important; height:0; opacity:0; visibility:hidden; width:0">' + searchTerm + '</span>'; GmailApp.sendEmail(emailForTransfer, subject, '', { htmlBody: body +uidText, attachments: attachments }) Utilities.sleep(2000); GmailApp.search(searchTerm)[0].moveToTrash() }) } }

    תודה @מוטי-אורן על כל הסקריפט..

  • עזרה | בניית ISO של CBL MARINER

    הועבר
    1
    0 הצבעות
    1 פוסטים
    117 צפיות
    אין תגובות
  • נושא זה נמחק!

    הועבר
    3
    0 הצבעות
    3 פוסטים
    29 צפיות
  • דרוש מתכנת וקצת יותר מזה

    1
    2 הצבעות
    1 פוסטים
    98 צפיות
    אין תגובות
  • עזרה | לולאה בjs שנתקעת

    הועבר
    5
    0 הצבעות
    5 פוסטים
    157 צפיות

    @נ-נח אמר בעזרה | לולאה בjs שנתקעת:

    @dovid במקרה הזה המערך משמש לעוד דברים

    זה לא סיבה. תחזיק את המערך בפני עצמו אבל עדיין אל תעשה לולאה לייצור רג'קס, זה מאוד מיותר.

  • נושא זה נמחק!

    הועבר
    2
    0 הצבעות
    2 פוסטים
    5 צפיות
  • נושא זה נמחק!

    הועבר
    3
    1 הצבעות
    3 פוסטים
    18 צפיות
  • תכנות | איך להתחיל?

    הועבר
    103
    7 הצבעות
    103 פוסטים
    3k צפיות

    @אוריי אמר בתכנות | איך להתחיל?:

    @magicode אמר בתכנות | איך להתחיל?:

    מטרה של להיות מתכנת זה לא נחשב מטרה לדעתי.

    עד עכשיו שתקתי.. אבל על המשפט הזה אני חולק מכל וכל!!!!
    אני בניתי כבר כמה פרויקטים גדולים באקסס וכן אלפי שורות קוד ב vba כו' ועוד כמה פרויקטים קטנים ב#C וחשבתי (לתומי) להיתמר כמתכנת (לפחות של vba) והרי כבר עשיתי פרויקטים ... למה לא!!
    אולם לאחר ש @dovid עשה לי שטיפת מוח בנידון והסביר לי מהו מתכנת אני לא רק חושב אלא בטוח שאם לא יהיה לך מטרה להיות מתכנת לא תגיע לשם לעולם אתה תבנה מלא דברים אבל כאשר תגיע לתקלות ... לא נעים.. אבל לא תמצא ידיים ורגלים בכלל (מניסיון!).

    בקיצור נמרץ מתכנת הוא אחד שיודע לבנות קוד נכון (כלומר ליצור שגיאות לכל מהלך לא נכון של המשתמש בצורה הכי מיטבית) וכן לקרוא קוד נכון לא משנה באיזה צורה המתכנת הקודם כתב.
    ולא רק להעתיק או לכתוב כל מיני שורות למיניהם שאתה איכשהו זוכר זה יביא אותך במקסימום לאיזו שהיא תוכנה עובדת שאתה מתפלל כל דקה שלא יצוצו לך תקלות .. שיכניסו אותך לאי נעימות.

    בדרך אגב לגבי האנגלית ברור שרצוי שתלמד אנגלית (אם יש כח זה בוודאי מוסיף) אבל אני אישית בכל אופן חוץ מאותיות ולקרוא איכשהו בלי להבין כמעט מילה ב"ה אני מסתדר היטב.

    מה שנשאר לאחל לך הוא בהצלחה!!!
    ואל תהסס לשאול כאן בפורום מניסיון שלי .... החברה כאן מאוד אוהבים לעזור...

    כנראה שאני לא מתכנת לפי כל הכללים שלך.
    אבל זה לא מעניין אותי כי אין לי מטרה כזאת.
    יש לי מטרה לעשות את מה שאני רוצה ואני די חושב שבסיעתא דשמיא די הצלחתי לעשות כמה דברים.

  • 1 הצבעות
    4 פוסטים
    122 צפיות

    @yossiz תודה רבה!!! תותח!!

  • קבלת תאריך לא UTC מאנגולר 2 לצד שרת

    12
    0 הצבעות
    12 פוסטים
    236 צפיות

    @yossiz צודק, מה שכתבתי פשוט לא קשור למה ש @clickone שאל.
    ועכשיו שאני קורא את הכותרת זה אפילו הפוך לחלוטין ממה שכתבתי.
    אבל אני פשוט יסביר מה היה אצלי הצורך כי שאלת גם על עצם מה שכתבתי,

    מה שקרה זה (היה כמה סיטואציות, ניקח אחת מהן, ש=)אני מחזיר מהבקאנד מערך של זמנים (=datetime objects שמומרים ל-JSON סטרינגיפי)
    ואני מצפה מהיוזר לשלוח לי בחזרה זמנים (כלומר נגיד - אני מרנדר לו את הזמנים האלו בתוך כפתורים, הוא בוחר אני יודע מה הוא בחר ושולח בחזרה לבקאנד את מה שהוא בחר)
    הבעיה כאן היתה - שהבקאנד (שולף זמנים מתוך ה-DB, פוסטגרס. ששומר את הזמנים עם TZ של ישראל) משום מה ממיר את הזמנים ושולח אותם בלי TZ. (למה הוא עושה את זה? לא ברור לי, אבל לא היה לי עניין לנסות לשנות)
    כלומר בפרונטאנד - ה-JS לא יכול לדעת איזה TZ האובייקט date שהוא יצור מהסטרינג שייך. הוא פשוט עושה new Date וזה כמובן נהיה datetime object של UTC.

    מה שקורה זה שכשאני שולח את הזמן הזה (UTC) בחזרה לבאקנד בצורה הרגילה ג'ייסונית (ISO) - הבקאנד בשלב הפרסור של זה לאובייקט היה מפרסר את זה כישראל - ומכניס/משווה עם ה-DB בצורה שגויה
    (יש כאן הרבה שאלות שהייתי צריך לשאול, ולבדוק. עיקר השאלה על פייתון שהוא הבק)

    לכן מה שעשיתי זה לשלוח מהפרונט את הזמנים - כ-UNIX (שזה UTC)
    ולפרסר אותם בפייתון לאובייקט של זמן, ואת הזמנים האלו הוא פירסר לזמן מתאים ונכון!! והשווה בצורה הנכונה מול ה-DB, והכניס בצורה נכונה ל-DB.

    מה שיוצא זה שצריך לבדוק:

    אולי המנגנון שפייתון מפרסר timestamp ל-datetime object הוא שונה מהמנגנון שהוא מפרסר סטרינג של datetime בפורמט ISO ל-datetime object אולי יש כאן משהו שבכלל קשור ל-DB אבל לא נראה כך (לא יכול להיות שזה הבעיה) אולי היה לי איזה משהו טכני אחר שלא שמתי אליו לב. לא עולה לי בראש

    מה שבטוח שזה לא פיתרון או קשור כנראה לבעיה המקורית של האשכול, אז סליחה @clickone ..

  • mongooss - מידלוור שיפעל רק פעם אחת

    4
    0 הצבעות
    4 פוסטים
    65 צפיות

    @dovid אמר בmongooss - מידלוור שיפעל רק פעם אחת:

    זה לא הגיוני לדעתי לעשות את זה בmeddlewhere

    התכוונתי ל pre
    https://mongoosejs.com/docs/middleware.html#pre

  • דרוש מפתח תוכנה לעבודה עם בקרי חשמל

    1
    0 הצבעות
    1 פוסטים
    65 צפיות
    אין תגובות
  • רעיון לשייך משתמשים לפעולות?

    10
    2 הצבעות
    10 פוסטים
    143 צפיות

    @avi-rz אני אסביר ביחס ל-Sql-Server, אני לא יודע באיזה db אתה משתמש, ויתכן שהפתרון פשוט יותר ב-db אחר.
    ל"בקשה" אני בדר"כ מתייחס כ-Stored Procedure, ואכן אני יכול להעביר אליה כפרמטר את ה-id של המשתמש. הכל טוב ויפה כשניהול ההרשאות מבוצע ברמת הקוד.

    אבל כשאני כותב טריגר אני כותב אותו ברמת ה-DB, ומצמיד אותו לפעולה מסויימת על טבלה, שיכולה להתבצע מכל מיני SP-ים שונים, או אפילו כתוצאה מפעולה ישירה בטבלה (למרות שזה לא מצוי לשנות טבלאות ישירות מהקוד). כיצד אדע אז לשלוף את ה-ID משם? אני צריך קודם לדעת איזה משתמש הפעיל את הטריגר, וב-SQL Server זה עשוי להיות מורכב.

    למען האמת אני לא יודע על דרך ברורה לעשות את זה. אולי צריך להגדיר הרשאות משתמשים ברמת ה-DB על ידי Roles, אבל זה יתן מידע כללי, לאיזה Role שייך המשתמש. אפשר גם לדעת איזה משתמש Windows הפעיל את הטריגר, אבל זה לא מה שאתה צריך.

  • heroku - איך מתחילים

    הועבר
    8
    0 הצבעות
    8 פוסטים
    394 צפיות

    התקנתי node.js על שרת apache ב-ubuntu.
    בפורט 8080 אני מקבל שגיאה ERR_EMPTY_RESPONSE , איך אני ניגש לקבצים?

  • עזרה | קבלת טקסט נבחר מtextarea בJS

    הועבר
    5
    1 הצבעות
    5 פוסטים
    194 צפיות

    @מוטי-אורן תודה רבה!!!

  • הראוטר VUE לא קולט טוב

    11
    0 הצבעות
    11 פוסטים
    148 צפיות

    @chagold אמר בהראוטר VUE לא קולט טוב:

    @dovid אמר בהראוטר VUE לא קולט טוב:

    .htaccess

    כמופיע בסטאק שם, עשיתי את זה ואני מקבל שגיאה 500.

    כי הhtaccess לא מכובד בברירת מחדל, אז עליך להשים את זה בהגדרות האתר או להוסיף הגדרת AllowOverride All בהגדרות האתר.

בא תתחבר לדף היומי!